artem78
@artem78
Заканчивающий разработчик

Почему не работает перехват ошибок?

Вот такой пример приводит к аварийному завершению скрипта, вместо обработки ошибки.
<?php
error_reporting(E_ERROR);

echo "Начало\n";

try {
        $a->foo(); # Переменной $a не существует!
} catch (Exception $e) {
        echo "Произошла ошибка: " . $e->getMessage() . "\n";
}

echo "Конец\n";


Вывод:
Начало
PHP Fatal error: Call to a member function foo() on a non-object in /home/user/www/test/try.php on line 8
  • Вопрос задан
  • 565 просмотров
Пригласить эксперта
Ответы на вопрос 2
zoonman
@zoonman
CEO @ LinuxQuestions.ru
Это работает в PHP 7.
Для младших версий нужно использовать error_handler(), но для Fatal, он может не сработать, поэтому иногда применяются решения ввиде register_shutdown_function().
Почитайте https://habrahabr.ru/post/261451/
Ответ написан
Комментировать
Исключение — это не ошибка. Но перехватить и обработать (без падения) ошибку уровня E_ERROR в качестве исключения можно только с версии PHP 7.

Error
Throwable
Throwable exception и ошибки в php7
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы