php教程,预定义错误级别有哪些?哪些在代码中常用?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
php
代码中除了各种系统错误输出,实际上程序员也可以自己主动抛出错误信息。那么,php
系统中预定义的错误级别都有哪些呢?那些是可以在代码编程中,经常使用到的呢?这就是本文要讨论的问题。
苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的编程经验总结。测试环境::win10
,nginx@1.15.11
,php@8.2.10-nts
。
预定义错误级别
根据php
官方定义,php
中预定义的错误级别常量(实际上都是整形int
),有16个,分别是:
常量 | 值 | 说明 | |
---|---|---|---|
E_ERROR | 1 | 致命的运行时错误。这类错误一般是不可恢复的情况。后果是导致脚本终止不再继续运行。 | |
E_WARNING | 2 | 运行时警告 (非致命错误)。仅给出提示信息,但是脚本不会终止运行。 | |
E_PARSE | 4 | 编译时语法解析错误。解析错误仅仅由分析器产生。 | |
E_NOTICE | 8 | 运行时通知。表示脚本遇到可能会表现为错误的情况,正常运行的脚本里面也可能会有类似的通知。 | |
E_CORE_ERROR | 16 | 在 PHP 初始化启动过程中发生的致命错误。该错误类似 E_ERROR,但是是由 PHP 引擎核心产生的。 | |
E_CORE_WARNING | 32 | PHP初始化启动过程中发生的警告 (非致命错误) 。类似 E_WARNING,但是是由 PHP 引擎核心产生的。 | |
E_COMPILE_ERROR | 64 | 致命编译时错误。类似 E_ERROR,但是是由 Zend 脚本引擎产生的。 | |
E_COMPILE_WARNING | 128 | 编译时警告 (非致命错误)。类似 E_WARNING,但是是由 Zend 脚本引擎产生的。 | |
E_USER_ERROR | 256 | 用户产生的错误信息。类似 E_ERROR,由用户使用trigger_error()来产生的。 | |
E_USER_WARNING | 512 | 用户产生的警告信息。类似 E_WARNING,由用户使用trigger_error()来产生的。 | |
E_USER_NOTICE | 1024 | 用户产生的通知信息。类似 E_NOTICE,由用户使用trigger_error()来产生的。 | |
E_STRICT | 2048 | 启用 PHP 对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。 | |
E_RECOVERABLE_ERROR | 4096 | 可被捕捉的致命错误。 它表示发生了一个可能非常危险的错误,但是还没有导致PHP引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获 (参见 set_error_handler()),将成为一个 E_ERROR 从而脚本会终止运行。 | |
E_DEPRECATED | 8192 | 运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。 | |
E_USER_DEPRECATED | 16384 | 类似 E_DEPRECATED, 由用户使用trigger_error()来产生的。 | |
E_ALL | 32767 | 所有错误、警告和通知。 |
有个很有意思的事情,这些预定义的错误级别实际代表的数值,是2
的幂级数逐级递增。但是最特殊的E_ALL
并不符合这个规律:32767=16384*2-1。E_ALL
代表的数字为什么减去了“1”呢?这个背后的故事值得商榷。
参考文章:
修改php.ini
显示错误
为了测试这些不同的错误级别常量,可能需要开启php.ini
中的几个选项。如下所示:
display_errors=On
display_startup_errors = On
error_reporting = E_ALL & ~E_NOTICE
最后一个error_reporting
选项,意思是显示所有的错误信息,但是不显示通知类型(E_NOTICE
)的。
error_reporting()
除了上述几个选项外,每个php
文件的顶部,也可以通过下面的类似打开开启报错级别。
不显示任何错误信息:
error_reporting(0);
显示所有错误信息:
error_reporting(E_All);
平时代码里面最常用的是:
error_reporting(E_ALL ^ E_NOTICE);
据说E_ALL ^ E_NOTICE
就等于E_ALL & ~E_NOTICE
。这个就有待考证这些特殊符号的用法了。
参考文章:
可能常用的错误级别
个人认为除了E_ALL
这个常用外,各种E_USER_
开头的代码,可能是后续文章里面由trigger_error()
函数所需要的。
常量 | 值 | 说明 |
---|---|---|
E_USER_ERROR | 256 | 用户产生的错误信息。类似 E_ERROR,由用户使用trigger_error()来产生的。 |
E_USER_WARNING | 512 | 用户产生的警告信息。类似 E_WARNING,由用户使用trigger_error()来产生的。 |
E_USER_NOTICE | 1024 | 用户产生的通知信息。类似 E_NOTICE,由用户使用trigger_error()来产生的。 |
E_USER_DEPRECATED | 16384 | 用户产生的警告信息。 类似 E_DEPRECATED, 由用户使用trigger_error()来产生的。 |
关于用户主动触发错误的情况,将由后续的trigger_error()
相关文章进行讨论。
结束语
更多苏南大叔的php
经验文章,请参考如下链接:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。