Start · Sprachen · PHP · Referenz · uopz_redefine

uopz_redefine

Funktion

Definiert eine bereits bestehende Konstante zur Laufzeit neu und ändert ihren Wert.

Kategorie: misc

Signatur

uopz_redefine(string $constant, mixed $value): bool

Beschreibung

uopz_redefine() gehört zur UOPZ-Erweiterung (User Operations for Zend) und ermöglicht es, den Wert einer bereits deklarierten Konstante zur Laufzeit zu überschreiben. Dies ist normalerweise in PHP nicht möglich, da Konstanten nach ihrer Definition unveränderlich sind. UOPZ umgeht diese Einschränkung auf Zend-Engine-Ebene.

Typischer Einsatzbereich ist das Unit-Testing: Mit uopz_redefine() lassen sich globale Konstanten wie Umgebungsflags, Konfigurationswerte oder Mock-Konstanten für einzelne Tests anpassen, ohne die Produktionscode-Logik verändern zu müssen.

Die Funktion kann sowohl globale Konstanten als auch Klassenkonstanten neu definieren, wenn die Klasse als dritter Parameter angegeben wird (in neueren UOPZ-Versionen). Bei Klassenkonstanten lautet die Signatur uopz_redefine(string $class, string $constant, mixed $value): bool.

Da uopz_redefine() tief in die Zend-Engine eingreift, sollte die Funktion ausschließlich in Testumgebungen verwendet werden und nie in Produktionscode.

Parameter

Name Typ Default Beschreibung
$constant Pflicht string Name der neu zu definierenden Konstante. Bei globalen Konstanten einfach der Konstantenname, z. B. 'MY_CONST'. Bei Verwendung mit einem Klassen-Parameter der Name der Klassenkonstante.
$value Pflicht mixed Der neue Wert, dem die Konstante zugewiesen werden soll. Muss ein skalarer Typ sein (int, float, string, bool oder null), wie es für Konstanten in PHP üblich ist.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Konstante erfolgreich neu definiert wurde, andernfalls false (z. B. wenn die Konstante nicht existiert).

Beispiele

Globale Konstante für einen Test neu definieren

<?php
// Konstante initial definieren
define('MAX_RETRIES', 3);

echo MAX_RETRIES; // Ausgabe: 3

// Konstante für den Test neu definieren
uopz_redefine('MAX_RETRIES', 10);

echo MAX_RETRIES; // Ausgabe: 10
3 10

Klassenkonstante für Unit-Test überschreiben

<?php
class Config {
    const TIMEOUT = 30;
}

echo Config::TIMEOUT; // Ausgabe: 30

// Klassenkonstante für den Test neu setzen
uopz_redefine('Config', 'TIMEOUT', 5);

echo Config::TIMEOUT; // Ausgabe: 5
30 5

// Wichtig · Fallstricke

Nur für Testumgebungen: uopz_redefine() sollte niemals in Produktionscode eingesetzt werden. Die UOPZ-Erweiterung greift direkt in die Zend-Engine ein und kann bei unsachgemäßer Verwendung zu unvorhersehbarem Verhalten, Abstürzen oder Sicherheitsproblemen führen.

Erweiterung erforderlich: Die Funktion ist nur verfügbar, wenn die UOPZ-Erweiterung (ext/uopz) installiert und aktiviert ist. Sie ist nicht Bestandteil der PHP-Kerninstallation.

Rücksetzen nicht vergessen: Nach einem Test sollte die Konstante mit uopz_redefine() auf den ursprünglichen Wert zurückgesetzt werden, um Seiteneffekte auf andere Tests zu vermeiden. Alternativ kann uopz_restore() verwendet werden, sofern verfügbar.