Signatur
Beschreibung
runkit7_function_copy() gehört zur runkit7-Erweiterung und erlaubt es, zur Laufzeit eine bereits definierte Funktion zu duplizieren. Die Quell-Funktion bleibt dabei unverändert erhalten, während unter dem Ziel-Namen eine identische Kopie registriert wird.
Dies ist besonders nützlich, wenn eine Funktion überschrieben werden soll (z. B. mit runkit7_function_redefine()), aber die ursprüngliche Implementierung unter einem anderen Namen weiterhin erreichbar bleiben muss – ein typisches Muster beim Monkey-Patching oder beim Erweitern bestehender Funktionen ohne direkten Quellcode-Zugriff.
Typische Einsatzbereiche sind Test-Umgebungen, in denen Built-in-Funktionen oder User-Funktionen durch Mock-Implementierungen ersetzt werden, sowie Plugin-Architekturen, in denen Hooks rund um bestehende Funktionen gelegt werden sollen.
Achtung: Die runkit7-Erweiterung muss explizit installiert und in der php.ini aktiviert sein. Sie ist nicht Bestandteil der PHP-Standardinstallation. Außerdem muss runkit.internal_override in der php.ini aktiviert sein, um interne PHP-Funktionen zu kopieren.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $source_name Pflicht | string | Name der vorhandenen Funktion, die kopiert werden soll. Kann eine benutzerdefinierte oder – bei entsprechender Konfiguration – eine interne PHP-Funktion sein. | |
| $destination_name Pflicht | string | Name, unter dem die Kopie der Funktion registriert werden soll. Darf noch nicht als Funktion existieren, sonst schlägt der Aufruf fehl. |
Rückgabewert
true bei Erfolg zurück, false wenn die Operation fehlschlug, z. B. wenn die Quell-Funktion nicht existiert oder der Ziel-Name bereits vergeben ist.Beispiele
Funktion sichern und dann überschreiben
<?php
// Eigene Funktion definieren
function greet(string $name): string {
return "Hallo, $name!";
}
// Originale Funktion unter neuem Namen sichern
runkit7_function_copy('greet', 'greet_original');
// Originale Funktion durch neue Implementierung ersetzen
runkit7_function_redefine('greet', 'string $name', '
$original = greet_original($name);
return $original . " Wie geht es dir?";
');
echo greet('Anna'); // Hallo, Anna! Wie geht es dir?
echo greet_original('Anna'); // Hallo, Anna!
Interne Funktion sichern (internes Override aktiviert)
<?php
// Setzt runkit.internal_override = On in php.ini voraus
// strlen unter backup-Namen sichern
runkit7_function_copy('strlen', 'strlen_original');
// strlen durch Mock ersetzen
runkit7_function_redefine('strlen', 'string $s', 'return 42;');
echo strlen('test'); // 42 (gemockt)
echo strlen_original('test'); // 4 (original)
// Wichtig · Fallstricke
Sicherheit / Stabilität: Das Manipulieren von Funktionen zur Laufzeit kann zu schwer nachvollziehbaren Fehlern und Sicherheitsproblemen führen. runkit7_function_copy() sollte niemals in Produktionscode eingesetzt werden – der Einsatz ist ausschließlich in kontrollierten Test- oder Entwicklungsumgebungen sinnvoll.
Interne PHP-Funktionen lassen sich nur dann kopieren (und überschreiben), wenn in der php.ini der Wert runkit.internal_override = On gesetzt ist. Andernfalls schlägt der Aufruf für Built-in-Funktionen fehl.
Die Erweiterung runkit7 ist der aktiv gepflegte Nachfolger des veralteten runkit. Stellen Sie sicher, dass Sie die runkit7-Erweiterung verwenden, da das originale runkit für neuere PHP-Versionen (7.x / 8.x) nicht mehr kompatibel ist.