PHP:触发致命错误?

时间:2013-04-08 19:14:46

标签: php fatal-error

当我的班级用户滥用它而不是我想要的东西时,我希望能够在我的php类中抛出一个致命的,无法捕获的错误。我不希望他/她能够通过catch条款恢复。 我知道trigger_error,但我只能发出警告或通知。

4 个答案:

答案 0 :(得分:44)

E_USER_ERROR是适合的常数。

trigger_error("Fatal error", E_USER_ERROR);

另请参阅manual pagelist of PHP Errors的第一个示例(只有以E_USER *开头的示例可能会从trigger_error发出)。

答案 1 :(得分:11)

注意:如果您使用自定义错误处理程序(请参阅set_error_handler) 除非错误处理程序返回false,否则E_USER_ERROR将不会停止/退出/死亡

nutshell:您的自定义错误处理程序有效地确定E_USER_ERROR是否被视为致命

答案 2 :(得分:5)

debug_print_backtrace();
trigger_error("As much information as you can provide, please", E_USER_ERROR);
exit();

exit()完全终止PHP脚本。您可以向用户或开发人员提供有关错误的信息越多越好。错误代码是过时的。

编辑:使用E_USER_ERROR应该终止脚本,所以在trigger_error()之前移动了debug_print_backtrace()。

答案 3 :(得分:1)

如果您使用的是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之外,您将收到致命错误。