Предположим, у меня есть этот фрагмент кода, в котором я пытаюсь убедиться, что все мои ошибки каким-то образом сообщаются, но посетителям не нужно будет видеть, кроме красивой страницы, извиняющейся за ситуацию.
ini_set('display_errors', 'off');
error_reporting(E_ALL);
set_exception_handler('exceptionHandler');
function exceptionHandler($error)
{
// functionWithSyntaxError()
undefinedFunction();
echo $error->getMessage();
}
Если бы я имел functionWithSyntaxError()
без комментариев я бы увидел ошибку по поводу синтаксиса. Я предполагаю, что это потому, что код даже не запущен, а компилятор не заботится о моем обработчике исключений или других директивах.
Теперь, если я прокомментирую это и оставлю только undefinedFunction()
Я бы не смог записать ошибку о неопределенной функции, либо мой код работал бы дальше. Я не знаю, что происходит, поэтому я должен был бы установить display_errors
ON, и в этом случае я не смог бы отобразить свою первоначальную цель: не отображать ошибки, а сообщать о них молча.
Итак, в этом случае я думаю, что компилятор не проверяет неопределенную функцию, как это происходит с синтаксисом. Что происходит в этом случае? Это, конечно, тоже не продолжается. Разве код не должен зацикливаться? Что происходит под капотом?
Я знаю, что у меня есть лучшие варианты для корректной обработки ошибок, например, определения режима отладки (где будут отображаться ошибки), но я просто хочу понять тонкости этой ситуации
Задача ещё не решена.
Других решений пока нет …