Signatur
Beschreibung
uopz_undefine() ist Teil der uopz-Erweiterung (User Operations for Zend Engine) und ermöglicht es, eine zuvor definierte Konstante zur Laufzeit zu entfernen. Nach dem Aufruf verhält sich die Konstante so, als ob sie nie definiert worden wäre – defined() liefert false und jeder Zugriff auf ihren Namen als Konstante schlägt fehl.
Die Funktion existiert in zwei Varianten: Mit einem Argument wird eine globale Konstante aufgehoben. Mit zwei Argumenten ($class und $constant) wird eine Klassenkonstante entfernt. Dies ist besonders nützlich beim Unit-Testing, wenn bestimmte Konstanten den Programmfluss beeinflussen und für einzelne Tests in einen undefinierten Zustand versetzt werden sollen.
Wichtig: uopz_undefine() ist ausschließlich für Test- und Debugging-Umgebungen gedacht. Im Produktiveinsatz kann das Entfernen von Konstanten zu schwerem undefiniertem Verhalten führen, da viele Code-Teile auf deren Existenz angewiesen sein können.
Die Funktion ergänzt uopz_redefine(), mit der eine Konstante auf einen neuen Wert gesetzt werden kann, ohne sie zunächst aufheben zu müssen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class | string | Optionaler Klassenname, wenn eine Klassenkonstante aufgehoben werden soll. Wird dieser Parameter angegeben, muss constant der Name der aufzuhebenden Klassenkonstante sein. |
|
| $constant Pflicht | string | Der Name der aufzuhebenden Konstante. Bei globalem Aufruf (ohne class) handelt es sich um eine globale Konstante, andernfalls um eine Klassenkonstante der angegebenen Klasse. |
Rückgabewert
true zurück, wenn die Konstante erfolgreich aufgehoben wurde. Gibt false zurück, wenn die Konstante nicht existiert oder das Aufheben fehlschlägt.Beispiele
Globale Konstante zur Laufzeit aufheben
<?php
define('APP_DEBUG', true);
var_dump(defined('APP_DEBUG')); // true
var_dump(APP_DEBUG); // true
uopz_undefine('APP_DEBUG');
var_dump(defined('APP_DEBUG')); // false
// var_dump(APP_DEBUG); // würde Notice/Warning erzeugen – Konstante undefiniert
Klassenkonstante im Unit-Test aufheben
<?php
class Config {
const VERSION = '1.0.0';
}
var_dump(defined('Config::VERSION')); // true
var_dump(Config::VERSION); // '1.0.0'
uopz_undefine('Config', 'VERSION');
var_dump(defined('Config::VERSION')); // false
// Zugriff auf Config::VERSION wäre nun ein fataler Fehler
// Wichtig · Fallstricke
Nur für Test-/Debugging-Umgebungen: uopz_undefine() sollte niemals in Produktionscode eingesetzt werden. Das Entfernen von Konstanten zur Laufzeit kann zu schwerwiegenden, schwer nachvollziehbaren Fehlern führen.
Die Funktion setzt die uopz-PHP-Erweiterung voraus, die standardmäßig nicht installiert ist und separat über PECL bezogen werden muss (pecl install uopz). Die API hat sich zwischen verschiedenen uopz-Versionen leicht geändert – insbesondere das Zwei-Argument-Verhalten für Klassenkonstanten. Stellen Sie sicher, dass Sie eine zur installierten Version passende Doku verwenden.
In manchen Versionen der uopz-Erweiterung wirkt uopz_undefine() nur für den aktuellen Request und wird nicht persistent gespeichert. Bei der Verwendung in Test-Frameworks wie PHPUnit empfiehlt es sich, aufgehobene Konstanten in der tearDown()-Methode mit uopz_redefine() wiederherzustellen.