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

大家好,本次苏南大叔给大家带来的是一个有关php错误处理的教程,说的是php的异常处理函数set_exception_handler。在开始本文的内容之前,建议大家先复习一下这篇文章:https://newsn.net/say/php-ini-error.html ,看看最传统的php的错误处理方案,然后再回头看看本文中的内容。也许会有更深刻的认识。

前言

本文的内容适合在php脚本内容中,控制错误输出。php的各种框架中,都会出现这个函数set_exception_handler

在php语言自身的概念内,error和exception是两个概念,而在大家的意识里面,这两个可能是同一个概念,都是“报错”。这点可能需要大家先弄弄清。而php5和php7对于set_exception_handler函数的解释也是不同的,具体的区别在哪里呢?请查看下面的内容。

范例代码

下面的是苏南大叔为大家编写的,本文的讲解demo范例。

echo "PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
function exception_handler($exception) {
    $errno = $exception->getCode();
    $errstr = $exception->getMessage();
    $errfile = $exception->getFile();
    $errline = $exception->getLine();
    $errtrace = $exception->getTraceAsString();
    echo "<b>出错了,错误如下:</b><br/><br/>";
    echo "代码: $errno <br />\n";
    echo "信息: $errstr <br />\n";
    echo "文件: $errfile <br />\n";
    echo "行号: $errline <br />\n";
    echo "trace: $errtrace <br />\n";
    //exit();
}
set_exception_handler('exception_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";

在这个范例中,苏南大叔将要演示,在php5、php7中,对于set_exception_handler的不同处理结果。

php错误处理之set_exception_handler - 111
php错误处理之set_exception_handler(图13-1)

没有自定义错误处理函数时的截图

作为后文的对比,这里先展示些这些截图,显示系统默认对错误异常的处理情况。

php错误处理之set_exception_handler - 004
php错误处理之set_exception_handler(图13-2)

php错误处理之set_exception_handler - 000
php错误处理之set_exception_handler(图13-3)

php7中的set_exception_handler

在php7中,set_exception_handler函数,

  • 可以处理throw的exception和error,显示出一个错误后,自动停止响应。
  • 但是无法处理通过trigger_error触发的error,归于系统处理,并会继续执行。

php错误处理之set_exception_handler - php7_exception
php错误处理之set_exception_handler(图13-4)

php错误处理之set_exception_handler - php7_error
php错误处理之set_exception_handler(图13-5)

php错误处理之set_exception_handler - php7_error2
php错误处理之set_exception_handler(图13-6)

php错误处理之set_exception_handler - php7_trigger_error
php错误处理之set_exception_handler(图13-7)

php5中的set_exception_handler

php5中,set_exception_handler函数,

  • 可以处理throw的exception,显示出一个错误后,自动停止响应。
  • 但是无法处理任何的error,归于系统处理,并会继续执行。
  • php5中没有error这个类,无法throw一个Error,但是可以throw一个Exception

php错误处理之set_exception_handler - php5_exception
php错误处理之set_exception_handler(图13-8)

php错误处理之set_exception_handler - php5_exception2
php错误处理之set_exception_handler(图13-9)

php错误处理之set_exception_handler - php5_trigger
php错误处理之set_exception_handler(图13-10)

php错误处理之set_exception_handler - php5_not_support_error
php错误处理之set_exception_handler(图13-11)

php错误处理之set_exception_handler - php5_error_sorry
php错误处理之set_exception_handler(图13-12)

总结

set_exception_handler这个函数,在php5和php7中,表现出较大差别。触发错误的方式不同,在php中也可能表现出不同的形式。php7中的set_exception_handler,可以捕获error和exception,php5中的set_exception_handler,只可以捕获exception。

无法捕获的错误和异常,将进入php系统处理。如果你设置了php.ini中的错误处理方式,那么你将可以在你可以期待的地方,看到这些没有被捕获的错误的描述信息。

php错误处理之set_exception_handler - 99
php错误处理之set_exception_handler(图13-13)

总体来说,除了trigger_error之外,错误都是可以捕获的。但是对于error,在php5中,是通过另外的函数set_error_handler进行捕获的。在接下来的文章中,苏南大叔将会和大家探讨set_error_handler的使用。

更多苏南大叔的php相关的经验总结,请点击这里查看:https://newsn.net/tag/php/

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

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

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

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

苏南大叔需要你的支持

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