php错误处理之set_exception_handler
发布于 作者:苏南大叔 来源:程序如此灵动~

大家好,本次苏南大叔给大家带来的是一个有关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范例。
在这个范例中,苏南大叔将要演示,在php5、php7中,对于set_exception_handler
的不同处理结果。

没有自定义错误处理函数时的截图
作为后文的对比,这里先展示些这些截图,显示系统默认对错误异常的处理情况。


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




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





总结
set_exception_handler
这个函数,在php5和php7中,表现出较大差别。触发错误的方式不同,在php中也可能表现出不同的形式。php7中的set_exception_handler
,可以捕获error和exception,php5中的set_exception_handler
,只可以捕获exception。
无法捕获的错误和异常,将进入php系统处理。如果你设置了php.ini中的错误处理方式,那么你将可以在你可以期待的地方,看到这些没有被捕获的错误的描述信息。

总体来说,除了trigger_error
之外,错误都是可以捕获的。但是对于error
,在php5中,是通过另外的函数set_error_handler
进行捕获的。在接下来的文章中,苏南大叔将会和大家探讨set_error_handler
的使用。
更多苏南大叔的php相关的经验总结,请点击这里查看:https://newsn.net/tag/php/ 。


