Пусть один имеет следующий код:Что происходит с автоматически пойманным исключением?
try {
$i = 0;
while ($i < 10) {
if ($i == 7) {
throw new Exception("Test exception");
}
$i++;
}
} catch (Exception $e) {
}
print($i);
Это будет возвращать 7
. Когда первое исключение в блоке try поймано, программа выполнит блок catch, а затем продолжит работу над этим блоком (а не?).
Однако, что происходит, когда я устанавливаю автоматический обработчик исключений (с set_exception_handler()
)? Когда я запускаю этот код, я не получаю возвращаемое значение:
function the_handler($e) {
}
set_exception_handler('the_handler');
$i = 0;
while ($i < 10) {
if ($i == 7) {
//throw new Exception("Test exception");
}
$i++;
}
print($i);
Почему это? Что именно происходит после вызова обработчика исключений?
'set_exception_handler()' is not 'catch' exceptions, он определяет поведение PHP после возникновения * uncaught * exception. Обычно это означает неудачное изложение и не показывает пользователю трассировку стека, полную данных, которые вы, возможно, не захотите опубликовать. – Sammitch
@ Да, это плохо, английский не мой родной язык. – Keelan