Поймать не работает и как сбросить обработчик исключений - PullRequest
3 голосов
/ 26 апреля 2010

catch не работает, поскольку установлен обработчик исключений с помощью set_exception_handler ()

Мне нужно "catch" для работы, так что, думаю, мне нужно как-то сбросить обработчик исключений. Такие вещи, как 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());
}

Фактическая выработка:

пойман исключение: привет мир

Желаемый вывод:

должно произойти: привет мир

Ответы [ 2 ]

6 голосов
/ 26 апреля 2010

restore_exception_handler, что связано с ручным вводом для set_exception_handler.

Кстати, эти обработчики исключений должны включаться только тогда, когда исключение составляет uncaught . Блок catch всегда должен иметь приоритет.


Чтение в комментариях на странице Исключения приводит вас к этой ошибке и этой ошибке . Они точно описывают то, что вы испытываете, исключения не могут быть перехвачены, когда определен пользовательский обработчик ошибок.

Решение:

Исправлено в 5.3 и HEAD, не будет перенесено в 5.2.

0 голосов
/ 26 апреля 2010

Функция: restore_exception_handler . Однако , обработчик должен вызываться только тогда, когда исключение не обработано. Не отключает ловли.

...