Я пытаюсь отловить как можно больше ошибок в PHP и правильно обработать их не по умолчанию. Мой вопрос лучше всего иллюстрируется в этом примере:
<?php
function errorHandler($errno, $errstr, $errfile, $errline){
echo "Error handler here <br>\n";
//throw new Exception($errstr);
}
function shutdownFunction() {
echo "Hi I'm in here <br>\n";
}
set_error_handler("errorHandler");
register_shutdown_function("shutdownFunction");
try {
$undefined->ok(); // causes some error
} catch(Exception $e) {
echo "Caught the exception <br>\n";
}
Результат выполнения этого кода в виде PHP-программы будет означать, что errorHandler()
запущен, напечатана ошибка PHP (если «display_errors» установлен на «On»), а затем shutdownFunction()
запущен.
У меня возникает проблема, если я раскомментирую этот исключительный бросок; Я хочу, чтобы исключения PHP возникали как можно чаще. Если я раскомментирую оператор throw
, то вызывается обработчик ошибок, который выдает исключение, что вызывает дальнейшую ошибку, в результате которой shutdownFunction()
не вызывается.
Насколько я понимаю, я не могу превратить эту ошибку в ловкое исключение; тем не менее, я хотел бы, по крайней мере, убедиться, что функция shutdown вызывается, не ограничивая мою способность перехватывать по крайней мере некоторые php-ошибки как исключения (то есть я не хочу удалять этот оператор throw
в errorHandler()
).
Есть ли какая-то проверка в ErrorHandler, которую я могу сделать, чтобы проверить, не вызовет ли его сброс или нет shutdownFunction()
, который будет обойден?