Start · Sprachen · PHP · Referenz · uopz_del_function

uopz_del_function

Funktion

Löscht eine zuvor mit <code>uopz_add_function()</code> hinzugefügte Funktion oder Methode aus dem Laufzeitsystem.

seit PHP 5.0.0 Kategorie: misc

Signatur

uopz_del_function(string $class_or_function, string $function = null): bool

Beschreibung

uopz_del_function() gehört zur UOPZ-Erweiterung (User Operations for Zend) und ermöglicht es, Funktionen oder Methoden, die zuvor dynamisch mit uopz_add_function() registriert wurden, wieder zu entfernen. Die Funktion greift direkt in die Zend-Engine ein und manipuliert die interne Funktionstabelle zur Laufzeit.

Wird nur ein Argument übergeben, wird eine globale Funktion mit dem angegebenen Namen gelöscht. Werden zwei Argumente übergeben, wird die Methode $function aus der Klasse $class_or_function entfernt. Dies ist besonders im Testumfeld nützlich, um nach Tests gezielt hinzugefügte Mock-Funktionen oder -Methoden wieder aufzuräumen.

UOPZ ist primär für den Einsatz in Unit-Test-Umgebungen konzipiert und sollte niemals in Produktivsystemen eingesetzt werden, da es das normale Laufzeitverhalten von PHP grundlegend verändern kann. Es eignet sich hervorragend in Kombination mit Frameworks wie PHPUnit, um Abhängigkeiten zur Laufzeit zu steuern.

Zu beachten ist, dass uopz_del_function() nur Funktionen entfernt, die mit uopz_add_function() hinzugefügt wurden. Nativ definierte oder über function-Schlüsselwort erstellte Funktionen können auf diese Weise nicht entfernt werden.

Parameter

Name Typ Default Beschreibung
$class_or_function Pflicht string Der Name einer Klasse (wenn eine Methode gelöscht werden soll) oder der Name einer globalen Funktion (wenn kein zweites Argument übergeben wird).
$function string Der Name der Methode, die aus der im ersten Parameter angegebenen Klasse entfernt werden soll. Wird dieser Parameter weggelassen, wird eine globale Funktion mit dem im ersten Parameter angegebenen Namen gelöscht.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Funktion oder Methode erfolgreich gelöscht wurde, andernfalls false (z. B. wenn die Funktion nicht existiert oder nicht mit uopz_add_function() hinzugefügt wurde).

Beispiele

Globale Funktion nach dem Test wieder entfernen

<?php
// Voraussetzung: uopz-Erweiterung ist geladen

// Funktion zur Laufzeit hinzufügen
uopz_add_function('my_custom_helper', function(): string {
    return 'Hallo aus dem Mock!';
});

echo my_custom_helper(); // Hallo aus dem Mock!

// Funktion wieder entfernen
$result = uopz_del_function('my_custom_helper');
var_dump($result); // bool(true)

// Die Funktion existiert nicht mehr
var_dump(function_exists('my_custom_helper')); // bool(false)
Hallo aus dem Mock! bool(true) bool(false)

Dynamisch hinzugefügte Methode aus einer Klasse entfernen

<?php
// Voraussetzung: uopz-Erweiterung ist geladen

class MeineKlasse {}

// Methode zur Laufzeit hinzufügen
uopz_add_function('MeineKlasse', 'mockMethode', function(): string {
    return 'Mock-Ergebnis';
});

$obj = new MeineKlasse();
echo $obj->mockMethode(); // Mock-Ergebnis

// Methode wieder entfernen
$result = uopz_del_function('MeineKlasse', 'mockMethode');
var_dump($result); // bool(true)

// Methode existiert nicht mehr
var_dump(method_exists('MeineKlasse', 'mockMethode')); // bool(false)
Mock-Ergebnis bool(true) bool(false)

// Wichtig · Fallstricke

Achtung: Die UOPZ-Erweiterung ist ausschließlich für Entwicklungs- und Testumgebungen geeignet. Der Einsatz auf Produktivsystemen kann zu unvorhersehbarem Verhalten, Sicherheitslücken und Stabilitätsproblemen führen.

uopz_del_function() funktioniert nur mit Funktionen, die zuvor über uopz_add_function() registriert wurden. Das Entfernen nativ definierter PHP-Funktionen ist nicht möglich und schlägt mit false fehl.

Die Verfügbarkeit und das Verhalten der Funktion können je nach UOPZ-Version variieren. Es empfiehlt sich, die Kompatibilität mit der verwendeten PHP-Version zu prüfen.