33

我希望能够在我的 php 类中抛出一个致命的、无法捕获的错误,因为我的类的用户因为我不想要的东西而滥用它。我不希望他/她能够通过 catch 子句恢复。我知道trigger_error,但我只能让它发出警告或通知。

4

4 回答 4

54

E_USER_ERROR 是合适的常数。

trigger_error("Fatal error", E_USER_ERROR);

另请参阅手册页的第一个示例和PHP 错误列表(只有以 E_USER* 开头的错误可能从 trigger_error 发出)。

于 2013-04-08T19:15:07.670 回答
13

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

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

于 2014-12-09T17:48:45.823 回答
6
debug_print_backtrace();
trigger_error("As much information as you can provide, please", E_USER_ERROR);
exit();

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

编辑:使用 E_USER_ERROR 无论如何都应该终止脚本,因此将 debug_print_backtrace() 移到 trigger_error() 之前。

于 2014-11-05T08:51:25.287 回答
2

如果您使用的是 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,你会得到一个致命错误。

于 2018-05-23T11:23:20.590 回答