跟着 base.php 继续走,来到了注册错误和异常处理机制的代码
其实异常处理机制也没什么好讲的,只是今天没什么好分享的。又无聊,就来写一下吧
注册错误
//base.php
// 注册错误和异常处理机制
Error::register();
在base.php
中调用了 错误异常处理的注册函数,因为上面我们已经实现了自动注册,所以我们能直接找到Error这个类。
public static function register()
{
error_reporting(E_ALL);
set_error_handler([__CLASS__, 'appError']);
set_exception_handler([__CLASS__, 'appException']);
register_shutdown_function([__CLASS__, 'appShutdown']);
}
这注册方法中,做了4件事
- 使所以错误全部爆出
- 设置 错误处理函数
- 设置 异常处理函数
- 设置程序脚本结束时最后执行的函数
于是乎就设置好了 tp5.1的注册错误异常机制。
错误处理
我们来模拟一下发生错误时的处理。 我们在、index方法中 故意调用一个不存在的方法,触发了 notie 的错误。
于是乎,我们进入了我们的错误处理函数 appError()
public static function appError($errno, $errstr, $errfile = '', $errline = 0)
{
$exception = new ErrorException($errno, $errstr, $errfile, $errline);
if (error_reporting() & $errno) {
// 将错误信息托管至 think\exception\ErrorException
throw $exception;
}
self::getExceptionHandler()->report($exception);
}
三段代码分别做3件事
- 保存错误信息
- 判断其是否开起了该错误信息的显示
error_reporting() & $errno
,如果开启了,就直接返回该错误。如果没有开启,则继续执行 - 先获取异常信息的处理函数,根据错误信息返回到浏览器
未完
Comming Soon