Подтвердить что ты не робот

PHP: Запущена фатальная ошибка?

Я хотел бы иметь возможность выбросить фатальную, нечеткую ошибку в моем классе php, когда пользователь моего класса злоупотребляет им тем, чего я не хотел. Я не хочу, чтобы он/она мог восстановиться с уловкой. Я знаю о trigger_error, но я могу только предупредить его или предупредить.

4b9b3361

Ответ 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 вы получите фатальную ошибку.