Signatur
Beschreibung
runkit7_method_remove() ist Teil der Runkit7-Extension und ermöglicht es, eine bestehende Methode einer Klasse zur Laufzeit vollständig zu entfernen. Nach dem Aufruf ist die Methode für alle nachfolgenden Instanziierungen und auch für bereits existierende Objekte dieser Klasse nicht mehr verfügbar.
Die Funktion ist typischerweise in Test- und Mocking-Szenarien nützlich, wenn Methoden dynamisch entfernt werden müssen, ohne den Quellcode zu verändern – etwa um das Fehlen einer Methode in Integrationstests zu simulieren oder um Klassen-Verhalten zur Laufzeit anzupassen.
Hinweis: Runkit7 ist eine PECL-Extension und muss separat installiert werden. Die PHP-Konfigurationsoption runkit.internal_override muss aktiviert sein, wenn interne PHP-Klassen manipuliert werden sollen.
Das Entfernen von Methoden aus laufenden Systemen ist riskant und sollte ausschließlich in kontrollierten Umgebungen wie Unit-Tests oder Entwicklungsumgebungen eingesetzt werden – niemals in produktivem Code.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class_name Pflicht | string | Der Name der Klasse, aus der die Methode entfernt werden soll. | |
| $method_name Pflicht | string | Der Name der Methode, die aus der Klasse entfernt werden soll. |
Rückgabewert
true bei Erfolg zurück, oder false wenn die Methode nicht gefunden wurde oder das Entfernen fehlschlug.Beispiele
Methode einer Klasse zur Laufzeit entfernen
<?php
class MeineKlasse
{
public function hallo(): string
{
return 'Hallo Welt!';
}
public function tschuess(): string
{
return 'Tschüss!';
}
}
$obj = new MeineKlasse();
echo $obj->hallo(); // Hallo Welt!
// Methode zur Laufzeit entfernen
runkit7_method_remove('MeineKlasse', 'hallo');
// Diese Methode existiert nun nicht mehr
$obj2 = new MeineKlasse();
try {
$obj2->hallo();
} catch (Error $e) {
echo 'Fehler: ' . $e->getMessage();
}
Einsatz in einem Test-Szenario
<?php
class Datenbankzugriff
{
public function verbinde(): bool
{
// Echte Datenbankverbindung
return true;
}
public function trenne(): void
{
// Verbindung trennen
}
}
// In einem Test: 'trenne'-Methode entfernen, um Fehlerfall zu simulieren
$entfernt = runkit7_method_remove('Datenbankzugriff', 'trenne');
var_dump($entfernt);
$db = new Datenbankzugriff();
var_dump(method_exists($db, 'trenne'));
// Wichtig · Fallstricke
Sicherheit und Stabilität: Das Entfernen von Methoden zur Laufzeit kann zu schwer nachvollziehbaren Fehlern führen, insbesondere wenn andere Teile des Codes die betroffene Methode noch aufrufen. Der Einsatz sollte auf Testumgebungen beschränkt bleiben.
Runkit7 funktioniert nicht mit statisch kompilierten Binaries oder unter bestimmten OPcache-Konfigurationen. Für interne PHP-Klassen (z. B. PDO, DateTime) ist die INI-Einstellung runkit.internal_override = 1 erforderlich.
Die Funktion steht nur zur Verfügung, wenn die runkit7-Extension über PECL installiert und in der php.ini geladen ist.