Signatur
Beschreibung
uopz_unset_hook ist Teil der UOPZ-Erweiterung (User Operations for Zend) und ermöglicht es, einen zuvor mit uopz_set_hook registrierten Hook von einer globalen Funktion oder einer Klassenmethode zu entfernen. Nach dem Entfernen des Hooks wird die ursprüngliche Funktion bzw. Methode wieder ohne zusätzlichen Callback aufgerufen.
Die Funktion wird hauptsächlich im Kontext von Unit-Tests und Mocking-Szenarien verwendet, um nach dem Test aufzuräumen und sicherzustellen, dass die Hooks nicht in anderen Testfällen stören. Sie kann sowohl für freie Funktionen als auch für Methoden beliebiger Klassen eingesetzt werden.
Wird nur ein Argument übergeben, bezieht sich der Aufruf auf eine globale Funktion. Bei zwei Argumenten wird der Hook einer Methode der angegebenen Klasse entfernt. Ist kein entsprechender Hook gesetzt, gibt die Funktion false zurück.
Hinweis: UOPZ ist eine Erweiterung, die primär für Testzwecke konzipiert ist und sollte niemals in einer Produktionsumgebung eingesetzt werden, da sie tief in den Zend-Engine-Mechanismus eingreift.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class | string | Der Name der Klasse, deren Methoden-Hook entfernt werden soll. Wird dieser Parameter weggelassen, bezieht sich function auf eine globale Funktion. |
|
| $function Pflicht | string | Der Name der globalen Funktion oder Methode, deren Hook entfernt werden soll. |
Rückgabewert
true zurück, wenn der Hook erfolgreich entfernt wurde, oder false, wenn kein entsprechender Hook gesetzt war oder die angegebene Funktion bzw. Methode nicht existiert.Beispiele
Hook einer globalen Funktion setzen und wieder entfernen
<?php
// Voraussetzung: UOPZ-Erweiterung ist installiert
function greet(string $name): string {
return "Hallo, $name!";
}
// Hook setzen: Vor jedem Aufruf von greet() wird der Hook ausgeführt
uopz_set_hook('greet', function() {
echo "[Hook] greet() wird aufgerufen." . PHP_EOL;
});
echo greet('Welt') . PHP_EOL;
// Ausgabe:
// [Hook] greet() wird aufgerufen.
// Hallo, Welt!
// Hook entfernen
$result = uopz_unset_hook('greet');
var_dump($result);
echo greet('PHP') . PHP_EOL;
// Ausgabe:
// bool(true)
// Hallo, PHP!
Hook einer Klassenmethode entfernen
<?php
// Voraussetzung: UOPZ-Erweiterung ist installiert
class Mailer {
public function send(string $to): bool {
echo "E-Mail an $to gesendet." . PHP_EOL;
return true;
}
}
// Hook auf die Methode send() der Klasse Mailer setzen
uopz_set_hook('Mailer', 'send', function() {
echo "[Hook] Mailer::send() wird aufgerufen." . PHP_EOL;
});
$mailer = new Mailer();
$mailer->send('test@example.com');
// Ausgabe:
// [Hook] Mailer::send() wird aufgerufen.
// E-Mail an test@example.com gesendet.
// Hook nach dem Test wieder entfernen
$result = uopz_unset_hook('Mailer', 'send');
var_dump($result);
$mailer->send('other@example.com');
// Ausgabe:
// bool(true)
// E-Mail an other@example.com gesendet.
// Wichtig · Fallstricke
Nur für Testumgebungen: Die UOPZ-Erweiterung greift direkt in die Zend Engine ein und ist ausschließlich für Entwicklungs- und Testzwecke geeignet. Der Einsatz in einer Produktionsumgebung kann zu unvorhersehbarem Verhalten und Stabilitätsproblemen führen.
Es empfiehlt sich, uopz_unset_hook in tearDown()-Methoden von PHPUnit-Testfällen zu verwenden, damit Hooks nach jedem Test sauber entfernt werden und keine Seiteneffekte auf folgende Tests entstehen.
Die UOPZ-Erweiterung muss explizit installiert und in der php.ini aktiviert sein (extension=uopz). Sie ist nicht Teil der Standard-PHP-Distribution.