php教程,如何利用trigger_error()编程触发自定义错误?
发布于 作者:苏南大叔 来源:程序如此灵动~

虽然在生产模式下,考虑到用户体验的问题,要尽量减少错误输出的机会。但是,错误只是限制于被使用者所看到。并不是说不能触发这种错误,触发后是否展示并不是目前所需要考虑的问题。那么,“主动触发错误”反应到php
编程语言里面,就是trigger_error()
函数了。

苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的编程经验总结。测试环境::win10
,nginx@1.15.11
,php@8.2.10-nts
。
显示错误
如果不显示错误信息的话,请检查php.ini
:
或者文件顶部,是否开启了下面的代码:
参考文章:
触发错误trigger_error()
触发自定义错误的trigger_error()
的函数原型,默认是E_USER_NOTICE
级别。
测试代码:

这里需要注意的是:
- 用户自定义错误是有不同的错误级别的,默认是警告
warning
级别。 - 其中
E_USER_ERROR
级别的,是个fatal error
,会导致程序停止执行。其它的错误级别,并不会停止代码执行。
参考文章:
可用错误级别
php
中预定义的错误级别常量,有16个。其中,表示程序员可以编程主动触发的错误有四种,分别是:E_USER_ERROR
、E_USER_WARNING
、E_USER_NOTICE
、E_USER_DEPRECATED
。
E_USER_
就表示区别于php
自身的报错信息了,似乎这命名有些歧义。
参考文章:

trigger_error()返回值
返回值是个布尔型,官方的说法是:“如果指定了错误的error_level
,会返回false
,正确则返回true
。” 然而,在本文的实验中,传递了错误的级别的时候,是直接报错的,并没有返回false
。
所以,对于苏南大叔目前的实验来说,trigger_error()
的返回值,只有fatal error
和bool(true)
真两种情况了。

try catch不能捕获trigger_error()
实验表明:try catch
无法捕获trigger_error()
错误。

set_error_hanlder()能捕获trigger_error()
实际上trigger_error()
是通过set_error_hanlder()
来进行捕获的。最简单的例子,如下:
set_error_hanlder()
还有更多的使用注意事项。由于篇幅关系,这里就简单的知道可以使用它的方式就可以了。参考文章:

抑制错误输出
这里还是E_USER_ERROR
这个错误级别是特殊的,它不能被@
符号所抑制错误输出。其它级别的都是可以的,比如:E_USER_WARNING
、E_USER_NOTICE
、E_USER_DEPRECATED
。

相关文章
- https://www.php.net/manual/en/function.trigger-error
- https://www.php.net/manual/en/function.set-exception-handler.php
- https://www.php.net/manual/en/function.set-error-handler.php
结束语
更多苏南大叔的php
相关经验文章,请参考:


