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

书接上回,上一篇文章里面,苏南大叔和大家探讨了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";

php错误处理之set_error_handler - 00_code
php错误处理之set_error_handler (图9-1)

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 (图9-2)

php错误处理之set_error_handler - php5_trigger
php错误处理之set_error_handler (图9-3)

php错误处理之set_error_handler - php5_error_diy
php错误处理之set_error_handler (图9-4)

php错误处理之set_error_handler - php7_exception
php错误处理之set_error_handler (图9-5)

php错误处理之set_error_handler - php7_new_error
php错误处理之set_error_handler (图9-6)

php错误处理之set_error_handler - php7_error
php错误处理之set_error_handler (图9-7)

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 (图9-8)

php错误处理之set_error_handler - php7_trigger_error2
php错误处理之set_error_handler (图9-9)

结语

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

 【源码】代码片段及相关软件点此获取

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

本站的忠实读者小伙伴,正在阅读下面这些文章:

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
欢迎指正文字或逻辑错误,将会择优在文末列出您的信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!