一,错误处理的概念
错误处理指的是系统(或者用户)在执行某些代码的时候,发现有错误,就会通过错误处理的形式告知程序员,俗称报错
二,错误分类
- 语法错误:书写的代码不符合 PHP 的语法规范,语法错误会导致代码在编译过程中不通过,所以代码不会执行(parse error)
- 运行时错误:代码编译通过,但是在执行过程中出现一些条件上的不满足导致的错误(runtime error)
- 逻辑错误:书写的代码在逻辑上出现的错误,导致代码正常执行但是得不到想要的结果
三,错误代号(常量)
(一)系统错误
- E_ERROR:fatal error,致命错误,代码在错误处会中断执行
- E_WARNING:warning,警告错误,不影响代码执行,但可能得到意想不到的结果
- E_PARSE:编译错误,代码不会执行
- E_NOTICE:notice,通知错误,不影响代码执行
(二)php启动错误
- E_CORE_ERROR: PHP 启动时遇到致命错误。这与
E_ERROR
类似,但是是由 PHP 引擎的核心部分引发的。- E_CORE_WARNING: PHP 启动时的非致命警告。这与
E_WARNING
类似,但是由 PHP 引擎的核心部分引发的。
(三)包含代码错误
- E_COMPILE_ERROR: 编译时致命错误。这些错误由编译器检测到,通常在包含或包含代码时发生。
- E_COMPILE_WARNING: 编译时的非致命警告。这些警告由编译器检测到,通常在包含或包含代码时发生。
(四)用户错误
- E_USER_ERROR
- E_USER_WARNING
- E_USER_NOTICE
用户在使用自定义错误触发时,会使用到的错误代码(系统用不到)
(五)其它错误
- E_STRICT: 编码标准警告。这些警告指示代码中的编码标准问题,可能影响代码的兼容性或可维护性。
- E_RECOVERABLE_ERROR: 可恢复的致命错误。这些错误表示脚本可以捕获并处理,但通常会导致脚本终止。
- E_DEPRECATED: 代码已经过时的警告。这些警告表示使用了已经被废弃或不推荐使用的功能,可能会在未来的 PHP 版本中被移除。
- E_USER_DEPRECATED: 用户生成的已弃用警告。这些警告由用户在代码中使用
trigger_error()
函数生成。- E_ALL,代表所有错误(通常在进行错误控制的时候使用较多),建议在开发过程中使用
(六)错误代号(常量)的底层原理
所有以E开头的错误代号(常量)其实都是二进制串,对于这一点,下面这段脚本给出了验证
<?php var_dump(E_ERROR);//1 -> 0001 echo "<-E_ERROR<br>";var_dump(E_WARNING);//2 -> 0010 echo "<-E_WARNING<br>";var_dump(E_PARSE);//4 -> 0100 echo "<-E_PARSE<br>";var_dump(E_NOTICE);//8 -> 1000 echo "<-E_NOTICE<br>";var_dump(E_CORE_ERROR);//16 -> 0001 0000 echo "<-E_CORE_ERROR<br>";var_dump(E_CORE_WARNING);//32 -> 0010 0000 echo "<-E_CORE_WARNING<br>";var_dump(E_COMPILE_ERROR);//64 -> 0100 0000 echo "<-E_COMPILE_ERROR<br>";var_dump(E_COMPILE_WARNING);//128 -> 1000 0000 echo "<-E_COMPILE_WARNING<br>";var_dump(E_USER_ERROR);//256 -> 0001 0000 0000 echo "<-E_USER_ERROR<br>";var_dump(E_USER_WARNING);//512 -> 0010 0000 0000 echo "<-E_USER_WARNING<br>";var_dump(E_USER_NOTICE);//1024 -> 0100 0000 0000 echo "<-E_USER_NOTICE<br>";var_dump(E_STRICT);//2048 -> 1000 0000 0000 echo "<-E_STRICT<br>";var_dump(E_RECOVERABLE_ERROR);//4096 -> 0001 0000 0000 0000 echo "<-E_RECOVERABLE_ERROR<br>";var_dump(E_DEPRECATED);//8192 -> 0010 0000 0000 0000 echo "<-E_DEPRECATED<br>";var_dump(E_USER_DEPRECATED);//16384 -> 0100 0000 0000 0000 echo "<-E_USER_DEPRECATED<br>";var_dump(E_ALL);//32767 -> 0111 1111 1111 1111 echo "<-E_ALL<br>";
如果想进行一些错误的控制,则可以利用这一点来使用位运算进行操作
例如:
E_ALL & ~E_NOTICE:排除E_NOTICE之外的其它错误
E_WARNING | E_NOTICE:只显示E_WARNING和E_NOTICE错误
四,错误触发
(一)程序运行时触发
系统自动根据错误发生后,显示对应的错误信息,主要针对代码的语法错误和运行时错误
例如:进行除法运算时,误使除数为0
(二)人为触发
知道某些逻辑可能会出错,从而使用对应的判断代码来触发响应的错误提示
(*)trigger_error()函数
使用trigger_error()函数来认为触发错误
trigger_error()函数有两个参数,第一个参数接收一个字符串(该字符串将在错误触发时被输出);第二个参数接收一个错误代号(常量)(第二个参数可以不填,如果不填则默认是Notice级别,如果要填,则会填本篇【三.(四)】中描述到的三个用户自定义错误,用于修改错误的级别
- E_USER_ERROR
- E_USER_WARNING
- E_USER_NOTICE
)
下面是两个代码示例: