我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

书接上回,上一篇文章里面,苏南大叔和大家探讨了set_exception_handler在php5和php7下面的不同表现。在本篇文章中,苏南大叔将给大家展示另外一个函数set_error_handler的基本用法。

苏南大叔:php错误处理之set_error_handler - php错误处理之set_error_handler
php错误处理之set_error_handler (图10-1)

代码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";

苏南大叔:php错误处理之set_error_handler - 00_code
php错误处理之set_error_handler (图10-2)

php7和php5中,该函数表现几乎一致

对于函数set_error_handler,在php5和php7中的表现,基本都一致。

  • 都不处理exception
  • 都仅仅处理trigger_error这个错误。
  • set_error_handler并不会阻止程序继续执行,除非主动exit()或者die()set_exception_handler会阻止程序继续执行。

结合上一篇的文章可以知道,我们如果同时设置set_error_handlerset_exception_handler的话。在php5中,上述代码中的,this_is_an_on_purpose_error()这种函数不存在的类似错误,将会是个空白区域,没有人处理。而在php7中,两者的联合使用,则可以完美覆盖所有的范例demo。这个空白区域的问题,我们将在下一篇文章中进行讨论。

下面是相关截图。

苏南大叔:php错误处理之set_error_handler - php5_exception
php错误处理之set_error_handler (图10-3)

苏南大叔:php错误处理之set_error_handler - php5_trigger
php错误处理之set_error_handler (图10-4)

苏南大叔:php错误处理之set_error_handler - php5_error_diy
php错误处理之set_error_handler (图10-5)

苏南大叔:php错误处理之set_error_handler - php7_exception
php错误处理之set_error_handler (图10-6)

苏南大叔:php错误处理之set_error_handler - php7_new_error
php错误处理之set_error_handler (图10-7)

苏南大叔:php错误处理之set_error_handler - php7_error
php错误处理之set_error_handler (图10-8)

set_error_handler的函数中的的注意事项。

  • 并不会像set_exception_handler一样,主动exit。错误处理程序处理后,除非主动exit。否则程序将会继续执行。
  • set_error_handler对应的错误处理函数中的return,是非常值得大家注意的地方。return false,将会继续转至系统错误程序处理之中,而return true则直接进入下一条php语句,而不是会经过一下系统的错误处理。

苏南大叔:php错误处理之set_error_handler - php7_trigger_error
php错误处理之set_error_handler (图10-9)

苏南大叔:php错误处理之set_error_handler - php7_trigger_error2
php错误处理之set_error_handler (图10-10)

结语

php的错误处理机制,是我们调试各种php框架的关键因素。所以搞清楚这些背后的原理,还是非常有必要的。欢迎大家继续关注苏南大叔的php相关经验文章。点击这里查看:https://seosn.com/tag/php/

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    exception