自定义错误捕捉函数register_shutdown_function
try catch 捕捉不到的异常或者错误,可以使用这个函数捕捉到,当然 E_USER_ERROR 级别的错误,程序是一定会停止的
- 演示是模仿
tp
获取最后一段 mysql 执行语句
值 | 常量 | 描述 |
---|---|---|
2 | E_WARNING | 非致命的 run-time 错误。不暂停脚本执行。 |
8 | E_NOTICE | run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。 |
256 | E_USER_ERROR | 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 |
512 | E_USER_WARNING | 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 |
1024 | E_USER_NOTICE | 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。 |
4096 | E_RECOVERABLE_ERROR | 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 | E_ALL | 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分) |
<?php
class Db
{
function getLastSql()
{
return "select * from user";
}
}
$db = new Db();
register_shutdown_function(
function () {
$param = func_get_args();
// var_dump($param);
$param[1]();
// echo $param[1]->getLastSql();
$error = error_get_last();
var_dump($error);
if ($error) {
// 获取错误信息
$param = func_get_args();
// var_dump($param);
echo "发生致命错误:" . $error["message"] . ",错误代码:" . $error["type"] . ",错误文件:" . $error["file"] . ",错误行号:" . $error["line"];
}
},
E_ALL,
// $db);
function () use ($db) {
echo $db->getLastSql();
}
);
try {
trigger_error('User Error', E_USER_ERROR);
} catch (\Exception $e) {
echo $e->getMessage();
} catch (\Error $e) {
echo $e->getMessage();
}
本作品采用《CC 协议》,转载必须注明作者和本文链接