Почему я не могу поймать это исключение «Максимальная вложенная функция» в PHP?

Я испытываю исключение из-за рекурсивной функции в моем коде, из-за характера того, что я кодирую, исключение можно просто проигнорировать и вместо этого вернуть FALSE. Итак, вот упрощенный код, чтобы проиллюстрировать мою проблему.

function recursive() {
try{ recursive(); }
catch(Exception $e)
{ echo "Error Caught!"; }
}
recursive();

Кажется, я не могу уловить «Максимальный уровень вложенности функций, равный 100, достигнут, прерывается!» исключение.
Я неправильно понял, как работает try-catch?

1

Решение

Потому что это фатальная ошибка, а не исключение, поэтому вы не можете использовать попытку & ловить.

Ошибка в целом означает, что выполнение программы всеми средствами не может быть продолжено и должно быть прервано.

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

Пример для попытки & поймать можно:
попытаться подключиться к базе данных … функция connect создает исключение, потому что сервер базы данных недоступен … вы ловите исключение и решаете, а затем давайте прочитаем материал из кэшированного файла. Цель исключения заключается в том, чтобы позволить разработчику решить, хочет ли он перехватить исключение и продолжить выполнение программы или приостановить его.

2

Другие решения

«Неустранимая ошибка PHP: достигнут максимальный уровень вложенности функции ‘100’, прерывание!»

Это «фатальная ошибка», а не исключение. В PHP нет способа преобразовать его в Exception с помощью set_error_handler (что хорошо для преобразования ошибок более низкого уровня в исключения).

В случае «фатальной ошибки» единственное, что вы можете сделать, — это выполнить некоторую очистку с помощью функции register_shutdown_function, где вы можете вызвать error_get_last и распознать, что произошла эта конкретная фатальная ошибка. Но это все, что Вы можете сделать, и нет никакого способа продолжить процесс разработки программы.

Кстати, эта частичная фатальная ошибка может произойти, только если у вас включен модуль XDebug в вашем php.ini.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector