在php中有三个函数用于自定义错误处理,它们的目的都是为了接管系统默认处理错误的方式,因为系统默认的处理方式是直接输出错误信息,很不友好,而且有时候我们希望在出现异常的时候,做一些逻辑,所以,自定义错误处理显得很有必要。
如下所示:
这个函数用于处理notice错误、warning错误、用户自定义的错误等(对于让脚本执停止运行的那种错误,将不会走这个回调),被捕获的错误将会走用户自定义的回调,不会按系统默认的方式直接输出错误信息。
set_error_handler(function ($errorNo, $errorStr, $errorFile, $errorLine) {
if (error_reporting() & $errorNo) {
switch ($errorNo) {
case E_USER_ERROR:
printf("错误编号:%s,消息:%s,文件:%s,行:%s" . PHP_EOL, $errorStr, $errorFile, $errorLine);
exit(1);
case E_USER_WARNING:
printf("消息:%s,文件:%s,行:%s" . PHP_EOL, $errorStr, $errorFile, $errorLine);
break;
case E_USER_NOTICE:
printf("消息:%s,文件:%s,行:%s" . PHP_EOL, $errorStr, $errorFile, $errorLine);
break;
default:
printf("错误编号:%s,消息:%s,文件:%s,行:%s" . PHP_EOL, $errorNo, $errorStr, $errorFile, $errorLine);
break;
}
}
}, E_ALL | E_STRICT);
// 自动触发,对于会让脚本中断执行的错误,不会执行回调
$foo['bar']; // 由于数组未定义,会产生一个notice级别的错误
$connect = mysqli_connect("localhost", "username", "password", "dbname");//warning
// 人为触发
trigger_error("用户自定义注意!", E_USER_NOTICE);
trigger_error("用户自定义警告!", E_USER_WARNING);
trigger_error("用户自定义错误!", E_USER_ERROR);
这个函数用于处理用户自定义的异常,有时候我们不想捕获异常,想直接抛出异常,这个方法就可以实现这个需求:
set_exception_handler(function (Throwable $e) {
echo '错误消息:' . $e->getMessage();
});
// 调用未定义的方法将会产生一个Error异常,可以被Throwable异常接受
foobar(3, 5);
这个函数用于处理,php脚本停止的时候执行逻辑,比如脚本执行完成、exit()退出、内存超出等情况,会导致脚本结束,这个时候可以注册一个回调,在脚本结束的时候执行一些逻辑:
register_shutdown_function(function () {
// 脚本结束时候,有错误才要执行
if (!is_null($error = error_get_last())) {
print_r($error);
}
});
getName();
页面更新:2024-03-20
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号