@rkfddf

Как перехватить любое исключение в php?

Как можно обработать исключение в php, например
try
{
   $arr = 1/0;  
    echo $arr;    
}
catch(Exception $e)
{
    echo 'обработано';
}

Несмотря не на какие попытки поймать исключение, всё равно выводится сообщение об ошибке "Warning: Division by zero".
Я могу такое сделать в python и не будет выведено никаких сообщений, только не могу этого сделать в php. Или пример вызова несуществующей функции, например
try
{
 code();  // вызов несуществующей функции    
}
catch(Exception $e)
{
    echo 'обработано';
}

выведет фатальную ошибку (Fatal error: Uncaught Error: Call to undefined function) и выполнение кода прекратится. Если ли вообще возможность перехватывать такие ошибки каким либо способом в php?
  • Вопрос задан
  • 310 просмотров
Решения вопроса 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
В старых версиях PHP деление на ноль никакое не исключение, а обычная ошибка.
О чем ясно написано в выводимом сообщении: Warning: Division by zero in ...

Чтобы перехватывать ошибки, их надо конвертировать в исключения. В простейшем варианте
set_error_handler(function ($level, $message, $file = '', $line = 0)
{
    throw new ErrorException($message, 0, $level, $file, $line);
});

После установки такого обработчика все ошибки будут автоматически конвертироваться в исключения, и соответственно могут быть пойманы через try..catch:

Fatal error: Uncaught ErrorException: Division by zero
Ответ написан
thewind
@thewind
php программист, front / backend developer
Ловите \Throwable $e
Это интерфейс всех исключений
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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