Signatur
Beschreibung
uopz_get_hook ist Teil der UOPZ-Erweiterung (User Operations for Zend) und ermöglicht es, den aktuell registrierten Hook einer globalen Funktion oder einer Klassenmethode abzurufen. Hooks werden mit uopz_set_hook gesetzt und vor der eigentlichen Ausführung der Zielfunktion aufgerufen, ohne deren Rückgabewert zu beeinflussen.
Die Funktion ist in erster Linie für Testzwecke gedacht, etwa in Unit-Test-Umgebungen, wo man prüfen möchte, ob ein bestimmter Hook korrekt registriert wurde. Sie erlaubt es, die registrierte Closure zu inspizieren oder zur weiteren Verarbeitung weiterzugeben.
Wird kein Hook gefunden – also wenn zuvor kein uopz_set_hook für die betreffende Funktion oder Methode aufgerufen wurde – gibt die Funktion null zurück. Bei der Verwendung für Methoden wird der Klassenname als erster Parameter und der Methodenname als zweiter Parameter übergeben.
Hinweis: Die UOPZ-Erweiterung ist ausschließlich für Entwicklungs- und Testumgebungen gedacht und sollte niemals in Produktionssystemen eingesetzt werden, da sie tief in die Zend Engine eingreift.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class_or_function Pflicht | string | Der Name der globalen Funktion oder – wenn ein Hook für eine Methode abgerufen werden soll – der Name der Klasse, deren Methode abgefragt wird. | |
| $function | string | Der Name der Methode innerhalb der mit class_or_function angegebenen Klasse. Wird dieser Parameter weggelassen, bezieht sich der erste Parameter auf eine globale Funktion. |
Rückgabewert
Closure zurück, die als Hook gesetzt wurde, oder null, wenn kein Hook für die angegebene Funktion bzw. Methode existiert.Beispiele
Hook einer globalen Funktion abrufen
<?php
// Hook für eine globale Funktion setzen
uopz_set_hook('strlen', function() {
echo "strlen wurde aufgerufen!\n";
});
// Den gesetzten Hook abrufen
$hook = uopz_get_hook('strlen');
if ($hook instanceof Closure) {
echo "Hook ist registriert.\n";
// Hook direkt aufrufen (nur zur Demonstration)
$hook();
} else {
echo "Kein Hook registriert.\n";
}
// Hook wieder entfernen
uopz_unset_hook('strlen');
Hook einer Klassenmethode abrufen
<?php
class MeinService {
public function verarbeite(string $input): string {
return strtoupper($input);
}
}
// Hook für eine Methode setzen
uopz_set_hook(MeinService::class, 'verarbeite', function() {
echo "verarbeite() wurde aufgerufen!\n";
});
// Prüfen, ob der Hook korrekt registriert ist
$hook = uopz_get_hook(MeinService::class, 'verarbeite');
if ($hook !== null) {
echo "Methoden-Hook erfolgreich abgerufen.\n";
} else {
echo "Kein Hook gefunden.\n";
}
// Tatsächliche Methode aufrufen – Hook wird vor der Ausführung ausgelöst
$service = new MeinService();
$result = $service->verarbeite('hallo');
echo $result . "\n";
// Aufräumen
uopz_unset_hook(MeinService::class, 'verarbeite');
// Wichtig · Fallstricke
Nur für Entwicklung und Tests: Die UOPZ-Erweiterung greift direkt in die Zend Engine ein. Der Einsatz in Produktionsumgebungen ist dringend abzuraten, da es zu unvorhersehbarem Verhalten, Speicherfehlern oder Sicherheitslücken kommen kann.
Die Funktion setzt eine installierte und aktivierte uopz-PHP-Erweiterung voraus. Sie ist nicht Teil des PHP-Kerns. Vor dem Einsatz sollte sichergestellt werden, dass die Erweiterung korrekt geladen ist (extension_loaded('uopz')).
Das Verhalten kann sich zwischen verschiedenen UOPZ-Versionen unterscheiden. Ab UOPZ 6.x wurden einige API-Änderungen eingeführt, die Kompatibilität mit älteren Versionen sollte geprüft werden.