Start · Sprachen · PHP · Referenz · runkit7_function_copy

runkit7_function_copy

Funktion

Kopiert eine vorhandene PHP-Funktion unter einem neuen Namen, sodass sie unter beiden Namen aufrufbar ist.

Kategorie: misc

Signatur

runkit7_function_copy(string $source_name, string $destination_name): bool

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

Typ
bool
Beschreibung
Gibt 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!
Hallo, Anna! Wie geht es dir? 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)
42 4

// 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.