Signatur
Beschreibung
get_exception_handler() liefert den Callable, der zuletzt über set_exception_handler() als globaler Exception-Handler registriert wurde. Wurde kein Handler gesetzt oder wurde er durch Aufruf von restore_exception_handler() vollständig entfernt, gibt die Funktion null zurück.
Die Funktion ist besonders nützlich, wenn man den aktuellen Handler vorübergehend sichern, temporär ersetzen und anschließend wiederherstellen möchte – etwa in Test-Frameworks, Middleware-Stacks oder Debugging-Werkzeugen, die einen eigenen Handler installieren und den vorherigen nicht verwerfen wollen.
Im Gegensatz zu set_exception_handler() verändert get_exception_handler() den internen Handler-Stack nicht; es handelt sich um eine reine Leseoperation. Sie greift ausschließlich auf den obersten (zuletzt registrierten) Handler zu.
Rückgabewert
callable, oder null, wenn kein benutzerdefinierter Handler gesetzt ist.Beispiele
Aktuellen Handler auslesen und ausgeben
<?php
function myExceptionHandler(Throwable $e): void {
echo 'Exception: ' . $e->getMessage();
}
set_exception_handler('myExceptionHandler');
$handler = get_exception_handler();
if ($handler !== null) {
echo 'Aktueller Handler: ';
var_dump($handler);
} else {
echo 'Kein Handler gesetzt.';
}
Handler temporär ersetzen und anschließend wiederherstellen
<?php
function originalHandler(Throwable $e): void {
echo '[Original] ' . $e->getMessage() . PHP_EOL;
}
function temporaryHandler(Throwable $e): void {
echo '[Temporär] ' . $e->getMessage() . PHP_EOL;
}
set_exception_handler('originalHandler');
// Aktuellen Handler sichern
$previousHandler = get_exception_handler();
// Eigenen Handler temporär installieren
set_exception_handler('temporaryHandler');
// ... eigene Logik ...
// Vorherigen Handler wiederherstellen
if ($previousHandler !== null) {
set_exception_handler($previousHandler);
} else {
restore_exception_handler();
}
$current = get_exception_handler();
echo 'Wiederhergestellter Handler: ' . $current . PHP_EOL;
// Wichtig · Fallstricke
Verfügbarkeit: get_exception_handler() wurde erst in PHP 8.4.0 eingeführt. In älteren PHP-Versionen steht die Funktion nicht zur Verfügung; dort muss der Handler manuell in einer eigenen Variable gesichert werden.
Beachte, dass restore_exception_handler() einen internen Stack nutzt und den zuletzt über set_exception_handler() gesetzten Handler entfernt. get_exception_handler() zeigt stets den Handler ganz oben auf diesem Stack – nicht zwingend den ursprünglichen PHP-Standard-Handler.