php错误处理之set_error_handler
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
书接上回,上一篇文章里面,苏南大叔和大家探讨了set_exception_handler
在php5
和php7
下面的不同表现。在本篇文章中,苏南大叔将给大家展示另外一个函数set_error_handler
的基本用法。
代码demo展示
本文中的代码,和上一篇文章基本类似,稍有不同。
echo "PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
function error_handler($errno, $errstr, $errfile, $errline) {
echo "<b>出错了,错误如下:</b><br/><br/>";
echo "代码: $errno <br />\n";
echo "信息: $errstr <br />\n";
echo "文件: $errfile <br />\n";
echo "行号: $errline <br />\n";
return true;
//return false;
}
set_error_handler("error_handler");
//throw new Exception('这是个自定义异常exception');
//throw new Exception('这是个带编号的自定义异常exception',1);
//trigger_error("这是个无法捕捉的自定义的错误error");
//throw new Error('这是个带编号的自定义的错误error',2);
this_is_an_on_purpose_error();
echo "恭喜,没有错误\n";
php7和php5中,该函数表现几乎一致
对于函数set_error_handler
,在php5和php7中的表现,基本都一致。
- 都不处理
exception
。 - 都仅仅处理
trigger_error
这个错误。 set_error_handler
并不会阻止程序继续执行,除非主动exit()
或者die()
,set_exception_handler
会阻止程序继续执行。
结合上一篇的文章可以知道,我们如果同时设置set_error_handler
和set_exception_handler
的话。在php5中,上述代码中的,this_is_an_on_purpose_error()这种函数不存在的类似错误,将会是个空白区域,没有人处理。而在php7中,两者的联合使用,则可以完美覆盖所有的范例demo。这个空白区域的问题,我们将在下一篇文章中进行讨论。
下面是相关截图。
set_error_handler
的函数中的的注意事项。
- 并不会像
set_exception_handler
一样,主动exit。错误处理程序处理后,除非主动exit。否则程序将会继续执行。 set_error_handler
对应的错误处理函数中的return,是非常值得大家注意的地方。return false
,将会继续转至系统错误程序处理之中,而return true
则直接进入下一条php语句,而不是会经过一下系统的错误处理。
结语
php的错误处理机制,是我们调试各种php框架的关键因素。所以搞清楚这些背后的原理,还是非常有必要的。欢迎大家继续关注苏南大叔的php相关经验文章。点击这里查看:https://newsn.net/tag/php/ 。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。