catch не работает, потому что установлен обработчик исключений с помощью set_exception_handler ()
Мне нужно «поймать», чтобы работать, поэтому я думаю, мне нужно как-то отключить обработчик исключений. Такие вещи, как set_exception_handler (NULL) , не работают.
Любые идеи о том, как удалить обработчик исключений?
function my_exception_handler($exception) { error_log("caught exception: " . $exception->getMessage() ); } set_exception_handler("my_exception_handler"); // QUESTION: how does on unset it ? //set_exception_handler(NULL); try { throw new Exception('hello world'); error_log("should not happen"); } catch(Exception $e) { error_log("should happen: " . $e->getMessage()); }
пойманное исключение: привет мир
должно случиться: привет мир
restore_exception_handler
, который связан с записью вручную для set_exception_handler
.
BTW, эти обработчики исключений должны вступать в игру только тогда, когда исключение не реализовано . Блок catch
всегда должен иметь приоритет.
Чтение немного в комментариях на странице « Исключения» приводит к этой ошибке и этой ошибке . Они описывают точно, что вы испытываете, Исключения не могут быть пойманы, когда определен пользовательский обработчик ошибок.
Решение:
Исправлено в 5.3 и HEAD, не будет передано обратно в 5.2.
Функция – restore_exception_handler . Однако обработчик должен вызываться только тогда, когда исключение необработанно. Он не отключает уловы.