Start · Sprachen · PHP · Referenz · uopz_delete

uopz_delete

Funktion

Löscht eine zuvor definierte Funktion oder Methode zur Laufzeit aus dem Funktions-/Methodenregister.

seit PHP 2.0.0 Kategorie: misc

Signatur

uopz_delete(string $function): void

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

Typ
void
Beschreibung
Gibt keinen Wert zurück. Wirft eine 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();
}
Hallo Welt Fehler: Call to undefined function meineFunktion()

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();
}
42 Hilfreich Fehler: Call to undefined method MeinService::hilfsMethode()

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