我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

php代码中除了各种系统错误输出,实际上程序员也可以自己主动抛出错误信息。那么,php系统中预定义的错误级别都有哪些呢?那些是可以在代码编程中,经常使用到的呢?这就是本文要讨论的问题。

苏南大叔:php教程,预定义错误级别有哪些?哪些在代码中常用? - 预定义错误级别
php教程,预定义错误级别有哪些?哪些在代码中常用?(图1-1)

苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的编程经验总结。测试环境::win10nginx@1.15.11php@8.2.10-nts

预定义错误级别

根据php官方定义,php中预定义的错误级别常量(实际上都是整形int),有16个,分别是:

常量说明
E_ERROR1致命的运行时错误。这类错误一般是不可恢复的情况。后果是导致脚本终止不再继续运行。
E_WARNING2运行时警告 (非致命错误)。仅给出提示信息,但是脚本不会终止运行。
E_PARSE4编译时语法解析错误。解析错误仅仅由分析器产生。
E_NOTICE8运行时通知。表示脚本遇到可能会表现为错误的情况,正常运行的脚本里面也可能会有类似的通知。
E_CORE_ERROR16在 PHP 初始化启动过程中发生的致命错误。该错误类似 E_ERROR,但是是由 PHP 引擎核心产生的。
E_CORE_WARNING32PHP初始化启动过程中发生的警告 (非致命错误) 。类似 E_WARNING,但是是由 PHP 引擎核心产生的。
E_COMPILE_ERROR64致命编译时错误。类似 E_ERROR,但是是由 Zend 脚本引擎产生的。
E_COMPILE_WARNING128编译时警告 (非致命错误)。类似 E_WARNING,但是是由 Zend 脚本引擎产生的。
E_USER_ERROR256用户产生的错误信息。类似 E_ERROR,由用户使用trigger_error()来产生的。
E_USER_WARNING512用户产生的警告信息。类似 E_WARNING,由用户使用trigger_error()来产生的。
E_USER_NOTICE1024用户产生的通知信息。类似 E_NOTICE,由用户使用trigger_error()来产生的。
E_STRICT2048启用 PHP 对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。
E_RECOVERABLE_ERROR4096可被捕捉的致命错误。 它表示发生了一个可能非常危险的错误,但是还没有导致PHP引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获 (参见 set_error_handler()),将成为一个 E_ERROR 从而脚本会终止运行。
E_DEPRECATED8192运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。
E_USER_DEPRECATED16384类似 E_DEPRECATED, 由用户使用trigger_error()来产生的。
E_ALL32767所有错误、警告和通知。
有个很有意思的事情,这些预定义的错误级别实际代表的数值,是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_ERROR256用户产生的错误信息。类似 E_ERROR,由用户使用trigger_error()来产生的。
E_USER_WARNING512用户产生的警告信息。类似 E_WARNING,由用户使用trigger_error()来产生的。
E_USER_NOTICE1024用户产生的通知信息。类似 E_NOTICE,由用户使用trigger_error()来产生的。
E_USER_DEPRECATED16384用户产生的警告信息。 类似 E_DEPRECATED, 由用户使用trigger_error()来产生的。

关于用户主动触发错误的情况,将由后续的trigger_error()相关文章进行讨论。

结束语

更多苏南大叔的php经验文章,请参考如下链接:

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

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

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