set_exception_handler
funkcja
Rejestruje funkcję wywoływaną automatycznie, gdy wyjątek nie zostanie przechwycony przez żaden blok try/catch.
set_exception_handler(?callable $callback): ?callable
set_exception_handler ustawia globalny handler dla nieprzechwyconych wyjątków — tych, które nie trafiły do żadnego catch. Gdy taki wyjątek wystąpi, PHP zamiast wyświetlać domyślny komunikat błędu wywoła podaną funkcję, przekazując jej obiekt wyjątku jako argument.
Handler jest wywoływany z obiektem implementującym Throwable (czyli zarówno Exception, jak i Error).
<?php
declare(strict_types=1);
set_exception_handler(function (Throwable $e): void {
http_response_code(500);
error_log($e->getMessage() . ' w ' . $e->getFile() . ':' . $e->getLine());
echo 'Wystąpił nieoczekiwany błąd. Spróbuj ponownie.';
});
// Ten wyjątek nie jest przechwycony — trafi do handlera
throw new RuntimeException('Baza danych niedostępna');
Ważne zasady:
- Po wykonaniu handlera skrypt kończy działanie — nie można go kontynuować.
- Przekazanie
nulljako argumentu przywraca domyślne zachowanie PHP. - Funkcja zwraca poprzedni handler (lub
null, jeśli żaden nie był ustawiony) — możesz go zachować i wywołać ze swojego handlera. set_exception_handlernie zastępuje blokówtry/catch— przechwytuje tylko wyjątki, które już przez nie "przepadły".- W środowisku produkcyjnym loguj błąd (np. przez
error_log) i pokazuj użytkownikowi ogólny komunikat, bez szczegółów wyjątku.