Signatur
Beschreibung
runkit7_constant_add() ist Teil der Runkit7-Erweiterung und ermöglicht es, während der Laufzeit neue Konstanten hinzuzufügen. Im Gegensatz zur eingebauten Funktion define() können damit nicht nur globale Konstanten, sondern auch Klassenkonstanten direkt in einer bestehenden Klasse definiert werden, ohne deren Quellcode ändern zu müssen.
Die Funktion ist besonders nützlich beim Testen, beim dynamischen Erweitern von Klassen in Plugins oder bei Meta-Programmierung. So lassen sich z. B. in Unit-Tests fehlende Klassenkonstanten hinzufügen, ohne die eigentliche Klasse anpassen zu müssen.
Der optionale Parameter newVisibility steuert die Sichtbarkeit der Klassenkonstante und akzeptiert die Runkit7-Sichtbarkeitskonstanten (RUNKIT7_ACC_PUBLIC, RUNKIT7_ACC_PROTECTED, RUNKIT7_ACC_PRIVATE). Bei globalen Konstanten wird dieser Parameter ignoriert.
Achtung: Runkit7 ist eine PECL-Erweiterung und nicht standardmäßig in PHP enthalten. Sie muss separat installiert werden. Die Verwendung in Produktivumgebungen sollte sorgfältig abgewogen werden, da Laufzeitmodifikationen die Wartbarkeit und Debuggbarkeit von Code beeinträchtigen können.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $constant_name Pflicht | string | Der Name der zu definierenden Konstante. Für Klassenkonstanten wird die Notation ClassName::CONSTANT_NAME verwendet. Für globale Konstanten genügt der Name allein. |
|
| $value Pflicht | mixed | Der Wert, der der Konstante zugewiesen werden soll. Wie bei define() üblich, sind skalare Werte (int, float, string, bool, null) sowie Arrays zulässig. |
|
| $newVisibility | int | RUNKIT7_ACC_PUBLIC | Sichtbarkeit der Klassenkonstante. Gültige Werte sind RUNKIT7_ACC_PUBLIC, RUNKIT7_ACC_PROTECTED und RUNKIT7_ACC_PRIVATE. Wird nur bei Klassenkonstanten ausgewertet. |
Rückgabewert
true zurück, wenn die Konstante erfolgreich definiert wurde, andernfalls false – z. B. wenn eine Konstante mit diesem Namen bereits existiert oder der angegebene Klassenname nicht gefunden werden kann.Beispiele
Globale Konstante zur Laufzeit hinzufügen
<?php
// Globale Konstante dynamisch definieren
runkit7_constant_add('APP_VERSION', '2.5.0');
echo APP_VERSION; // Ausgabe: 2.5.0
// Vergleich mit define()
define('DB_HOST', 'localhost');
echo DB_HOST; // Ausgabe: localhost
Klassenkonstante in bestehende Klasse einfügen
<?php
class Config {
// Diese Klasse hat zunächst keine Konstante MAX_RETRY
}
// Klassenkonstante zur Laufzeit hinzufügen
$result = runkit7_constant_add('Config::MAX_RETRY', 5, RUNKIT7_ACC_PUBLIC);
if ($result) {
echo 'Konstante erfolgreich hinzugefügt.' . PHP_EOL;
echo 'MAX_RETRY = ' . Config::MAX_RETRY . PHP_EOL;
} else {
echo 'Fehler beim Hinzufügen der Konstante.' . PHP_EOL;
}
Verwendung im Unit-Test-Kontext
<?php
// In einem Test-Setup: Fehlende Konstante für zu testende Klasse bereitstellen
class PaymentGateway {
public function getTimeout(): int {
return defined('PAYMENT_TIMEOUT') ? PAYMENT_TIMEOUT : 30;
}
}
// Konstante für den Test definieren
runkit7_constant_add('PAYMENT_TIMEOUT', 10);
$gateway = new PaymentGateway();
echo $gateway->getTimeout(); // Ausgabe: 10
// Wichtig · Fallstricke
Voraussetzungen: Die Runkit7-Erweiterung muss via PECL installiert (pecl install runkit7) und in der php.ini aktiviert sein (extension=runkit7). Ohne die Erweiterung ist runkit7_constant_add() nicht verfügbar.
Namenskonflikte: Versucht man, eine bereits existierende Konstante erneut zu definieren, schlägt der Aufruf fehl und gibt false zurück. Um eine bestehende Konstante zu ändern, muss zunächst runkit7_constant_redefine() verwendet werden.
Produktivumgebungen: Die Verwendung von Runkit7 in Produktivsystemen ist mit Bedacht einzusetzen. Laufzeitmodifikationen können unerwartete Seiteneffekte erzeugen, sind schwer zu debuggen und können die Vorhersehbarkeit des Programmverhaltens erheblich reduzieren.
PHP-Versionen: Runkit7 ist der Nachfolger der ursprünglichen Runkit-Erweiterung und für PHP 7 und 8 konzipiert. Die ursprüngliche Runkit-Erweiterung verwendete den Präfix runkit_ ohne die Ziffer 7.