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 null jako 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_handler nie zastępuje bloków try/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.
📘 Naucz się w lekcji →