Catch не работает и как отключить обработчик исключений

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 . Однако обработчик должен вызываться только тогда, когда исключение необработанно. Он не отключает уловы.