Start · Sprachen · PHP · Referenz · runkit7_constant_remove

runkit7_constant_remove

Funktion

Entfernt eine bereits definierte Konstante zur Laufzeit mithilfe der Runkit7-Erweiterung.

Kategorie: misc

Signatur

runkit7_constant_remove(string $constname): bool

Beschreibung

runkit7_constant_remove() gehört zur Runkit7-Erweiterung und ermöglicht es, eine zur Compilezeit oder Laufzeit definierte PHP-Konstante vollständig zu entfernen. Nach dem Aufruf ist die Konstante nicht mehr definiert und ein Zugriff darauf würde eine undefined constant-Warnung auslösen.

Diese Funktion ist vor allem in Testumgebungen nützlich, wo Konstanten zwischen einzelnen Testfällen zurückgesetzt oder verändert werden müssen, ohne den gesamten PHP-Prozess neu zu starten. Auch dynamische Plugin-Systeme oder Sandbox-Umgebungen können davon profitieren.

Achtung: Standardmäßig erlaubt PHP keine Änderung bereits definierter Konstanten. Runkit7 umgeht diese Einschränkung auf Interpreter-Ebene. Der Einsatz dieser Funktion in Produktivsystemen ist daher nicht empfehlenswert, da das Entfernen von Konstanten, auf die anderer Code angewiesen ist, zu unvorhersehbarem Verhalten führen kann.

Die Funktion ist der Nachfolger der veralteten runkit_constant_remove()-Funktion aus der originalen Runkit-Erweiterung und erfordert, dass die Runkit7-Erweiterung installiert und geladen ist.

Parameter

Name Typ Default Beschreibung
$constname Pflicht string Der vollständige Name der zu entfernenden Konstante. Für Klassenkonstanten kann die Notation Klassenname::KONSTANTENNAME verwendet werden. Globale Konstanten werden einfach mit ihrem Namen angegeben, z. B. 'MY_CONST'.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Konstante erfolgreich entfernt wurde. Gibt false zurück, wenn die Konstante nicht existiert oder ein Fehler aufgetreten ist.

Beispiele

Globale Konstante entfernen

<?php
// Konstante definieren
define('APP_VERSION', '1.0.0');

echo APP_VERSION; // Ausgabe: 1.0.0
echo defined('APP_VERSION') ? 'definiert' : 'nicht definiert'; // definiert

// Konstante entfernen
$result = runkit7_constant_remove('APP_VERSION');
var_dump($result); // bool(true)

echo defined('APP_VERSION') ? 'definiert' : 'nicht definiert'; // nicht definiert
1.0.0 definiert bool(true) nicht definiert

Klassenkonstante entfernen (PHPUnit-ähnlicher Testkontext)

<?php
class Config {
    const DEBUG_MODE = true;
}

// Klassenkonstante vor dem Test prüfen
var_dump(defined('Config::DEBUG_MODE')); // bool(true)

// Konstante entfernen
runkit7_constant_remove('Config::DEBUG_MODE');

// Klassenkonstante nach dem Entfernen prüfen
var_dump(defined('Config::DEBUG_MODE')); // bool(false)

// Anschließend eine neue Konstante mit dem gleichen Namen hinzufügen
runkit7_constant_add('Config::DEBUG_MODE', false);
var_dump(Config::DEBUG_MODE); // bool(false)
bool(true) bool(false) bool(false)

// Wichtig · Fallstricke

Sicherheit und Stabilität: Das Entfernen von Konstanten, die von anderen Teilen des Codes oder von Bibliotheken erwartet werden, kann zu schwer nachvollziehbaren Fehlern führen. Diese Funktion sollte ausschließlich in kontrollierten Testumgebungen verwendet werden.

Voraussetzung: Die Runkit7-Erweiterung muss installiert sein (pecl install runkit7) und in der php.ini mit extension=runkit7 geladen werden. Zusätzlich muss in der php.ini runkit.internal_override=1 gesetzt sein, falls interne PHP-Konstanten entfernt werden sollen.

Namensräume: Bei Konstanten in Namensräumen muss der vollständige qualifizierte Name angegeben werden, z. B. 'MyNamespace\\MY_CONST'.