Signatur
Beschreibung
uopz_delete ist Teil der uopz-Erweiterung (User Operations for Zend) und ermöglicht es, eine benannte Funktion zur Laufzeit vollständig aus dem internen Funktionsregister von PHP zu entfernen. Nach dem Aufruf ist die Funktion so, als hätte sie nie existiert – Aufrufe führen zu einem Undefined function-Fehler.
Primär gedacht für Unit-Tests und Mocking-Szenarien, erlaubt uopz_delete das gezielte Entfernen von Built-in- oder benutzerdefinierten Funktionen, um Testbedingungen zu isolieren oder um bestimmte Code-Pfade zu erzwingen, ohne die eigentliche Funktionsdefinition ändern zu müssen.
Die Erweiterung ist ausschließlich für Entwicklungs- und Testumgebungen gedacht und sollte niemals in produktiven Systemen eingesetzt werden, da sie den Zustand der PHP-Engine dauerhaft (für die Laufzeit des Prozesses) verändern kann und unvorhergesehene Nebeneffekte erzeugen kann.
Seit uopz 5.0 kann alternativ auch eine Klassenmethode gelöscht werden, indem die Klasse als erstes Argument und der Methodenname als zweites Argument übergeben wird: uopz_delete(string $class, string $function).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class | string | Optionaler Klassenname (ab uopz 5.0). Wird dieser Parameter angegeben, wird function als Methodenname dieser Klasse interpretiert und die entsprechende Methode gelöscht. |
|
| $function Pflicht | string | Der Name der zu löschenden Funktion (oder Methode, falls class angegeben wurde). Der Name ist case-insensitiv, da PHP Funktionsnamen case-insensitiv behandelt. |
Rückgabewert
RuntimeException oder erzeugt einen Fehler, wenn die angegebene Funktion/Methode nicht gefunden werden kann.Beispiele
Globale Funktion zur Laufzeit löschen
<?php
// Eigene Funktion definieren
function meineFunktion(): string {
return 'Hallo Welt';
}
echo meineFunktion(); // Ausgabe: Hallo Welt
// Funktion löschen
uopz_delete('meineFunktion');
// Aufruf nach dem Löschen führt zu einem Fehler
try {
meineFunktion();
} catch (\Error $e) {
echo 'Fehler: ' . $e->getMessage();
}
Klassenmethode zur Laufzeit löschen (uopz 5.0+)
<?php
class MeinService {
public function berechne(): int {
return 42;
}
public function hilfsMethode(): string {
return 'Hilfreich';
}
}
$service = new MeinService();
echo $service->berechne(); // Ausgabe: 42
echo $service->hilfsMethode(); // Ausgabe: Hilfreich
// Methode aus der Klasse löschen
uopz_delete('MeinService', 'hilfsMethode');
// Aufruf nach dem Löschen
try {
$service->hilfsMethode();
} catch (\Error $e) {
echo 'Fehler: ' . $e->getMessage();
}
// Wichtig · Fallstricke
Achtung: uopz_delete verändert den Zustand der PHP-Engine dauerhaft für die gesamte Laufzeit des aktuellen Prozesses bzw. Requests. In Testframeworks wie PHPUnit sollte man sicherstellen, dass gelöschte Funktionen nach jedem Test wiederhergestellt werden (z. B. mit uopz_add_function), um Seiteneffekte auf andere Tests zu vermeiden.
Die Erweiterung uopz muss explizit installiert und in der php.ini aktiviert sein. Sie ist nicht Teil der PHP-Standardinstallation. Zudem kann das Verhalten je nach uopz-Version variieren – insbesondere die Unterstützung für Klassenmethoden wurde erst in Version 5.0 eingeführt.
Niemals in Produktionsumgebungen verwenden, da das Entfernen von Kern- oder Framework-Funktionen zu schwerwiegenden, schwer debuggbaren Fehlern führen kann.