Я хотел бы иметь возможность выбросить фатальную, нечеткую ошибку в моем классе php, когда пользователь моего класса злоупотребляет им тем, чего я не хотел. Я не хочу, чтобы он/она мог восстановиться с уловкой.
Я знаю о trigger_error
, но я могу только предупредить его или предупредить.
PHP: Запущена фатальная ошибка?
Ответ 1
E_USER_ERROR - подходящая константа.
trigger_error("Fatal error", E_USER_ERROR);
Смотрите также первый пример страницы справочника и список ошибок PHP (только те, которые начинаются с E_USER *, могут быть выданы из trigger_error).
Ответ 2
Примечание. Если вы используете настраиваемый обработчик ошибок (см. set_error_handler)
E_USER_ERROR
НЕ останавливается/выходит/умирает, если обработчик ошибок не возвращает false
nutshell: ваш настраиваемый обработчик ошибок эффективно определяет, рассматривается ли E_USER_ERROR
как фатальный
Ответ 3
debug_print_backtrace();
trigger_error("As much information as you can provide, please", E_USER_ERROR);
exit();
exit() полностью завершает PHP script. Чем больше информации вы можете предоставить пользователям или разработчикам об ошибке, тем лучше. Коды ошибок - passé.
Изменить: использование E_USER_ERROR должно прекратить действие script в любом случае, поэтому перемещение debug_print_backtrace() перед trigger_error().
Ответ 4
Если вы используете PHP 7 или выше, класс Error также работает:
$flag = false;
try {
if ($flag == false) {
throw new Error('An error occured');
}
} catch (Error $e) {
echo $e->getMessage();
}
Если вы поставите throw new Error('An error occured');
за пределами Try Catch
вы получите фатальную ошибку.