Start · Sprachen · PHP · Referenz · runkit7_function_remove

runkit7_function_remove

Funktion

Entfernt eine zuvor definierte Funktion aus dem aktuellen PHP-Laufzeitkontext.

Kategorie: misc

Signatur

runkit7_function_remove(string $function_name): bool

Beschreibung

runkit7_function_remove() ist Teil der Runkit7-Erweiterung und erlaubt es, eine bereits definierte Funktion zur Laufzeit vollständig aus dem PHP-Funktionsraum zu entfernen. Nach dem Aufruf ist die Funktion nicht mehr aufrufbar und verhält sich so, als wäre sie nie definiert worden.

Diese Funktion ist besonders nützlich in Test- und Mock-Szenarien, in denen bestimmte Funktionen temporär deaktiviert oder durch andere ersetzt werden sollen. In Kombination mit runkit7_function_add() oder runkit7_function_rename() ermöglicht sie ein vollständiges Umschreiben von Funktionen zur Laufzeit.

Typische Einsatzgebiete sind Unit-Tests, bei denen interne PHP-Funktionen oder benutzerdefinierte Hilfsfunktionen für einen Test isoliert werden sollen, ohne den Code selbst zu verändern. Auch dynamische Plugin-Systeme, die Funktionen bedarfsweise laden und entladen, können von dieser Fähigkeit profitieren.

Achtung: Eingebaute PHP-Funktionen (internal functions) können standardmäßig nicht entfernt werden. Die Erweiterung muss mit der entsprechenden Compile-Option aktiviert worden sein, um interne Funktionen zu manipulieren. Produktionssysteme sollten diesen Mechanismus grundsätzlich vermeiden.

Parameter

Name Typ Default Beschreibung
$function_name Pflicht string Der Name der zu entfernenden Funktion. Groß-/Kleinschreibung wird dabei in der Regel nicht berücksichtigt, da PHP-Funktionsnamen case-insensitive sind.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Funktion erfolgreich entfernt wurde. Gibt false zurück, wenn die Funktion nicht gefunden wurde oder nicht entfernt werden konnte (z. B. bei internen Funktionen ohne entsprechende Compile-Option).

Beispiele

Benutzerdefinierte Funktion zur Laufzeit entfernen

<?php
function meine_hilfsfunktion(): string {
    return 'Hallo Welt';
}

// Funktion ist aufrufbar
echo meine_hilfsfunktion(); // Hallo Welt

// Funktion entfernen
$result = runkit7_function_remove('meine_hilfsfunktion');
var_dump($result); // bool(true)

// Nun ist die Funktion nicht mehr definiert
if (!function_exists('meine_hilfsfunktion')) {
    echo 'Funktion wurde erfolgreich entfernt.';
}
Hallo Welt bool(true) Funktion wurde erfolgreich entfernt.

Funktion im Testkontext temporär entfernen und neu definieren

<?php
function berechne_steuer(float $betrag): float {
    return $betrag * 0.19;
}

// Im Testsetup: Funktion entfernen und durch Mock ersetzen
runkit7_function_remove('berechne_steuer');
runkit7_function_add(
    'berechne_steuer',
    'float $betrag',
    'return 0.0;' // Mock gibt immer 0 zurück
);

echo berechne_steuer(100.0); // 0 (Mock-Verhalten)

// Aufräumen nach dem Test
runkit7_function_remove('berechne_steuer');
runkit7_function_add(
    'berechne_steuer',
    'float $betrag',
    'return $betrag * 0.19;'
);

echo berechne_steuer(100.0); // 19
0 19

// Wichtig · Fallstricke

Sicherheitshinweis: Die Möglichkeit, Funktionen zur Laufzeit zu entfernen oder zu ersetzen, birgt erhebliche Sicherheitsrisiken. In Webanwendungen sollte diese Funktionalität niemals in vom Benutzer beeinflussbaren Code-Pfaden erreichbar sein, da ein Angreifer damit kritische Sicherheitsfunktionen deaktivieren könnte.

Produktionseinsatz: Der Einsatz von Runkit7 in Produktionsumgebungen wird generell nicht empfohlen. Die Erweiterung ist primär für Entwicklungs-, Test- und Debug-Umgebungen gedacht.

Interne Funktionen: Um eingebaute PHP-Funktionen zu manipulieren, muss die Runkit7-Erweiterung mit der INI-Direktive runkit.internal_override = On konfiguriert sein. Ohne diese Einstellung schlägt runkit7_function_remove() bei internen Funktionen fehl.

Abhängigkeit: Diese Funktion erfordert die installierte und aktivierte runkit7-PECL-Erweiterung. Sie ist nicht Teil des PHP-Kerns.