PHP中的错误处理机制

PHP里有一套错误处理机制,可以使用set_error_handler接管PHP错误处理,也可以使用trigger_error函数主动抛出一个错误。

set_error_handler()函数设置用户自定义的错误处理函数。函数用于创建运行期间的用户自己的错误处理方法。它需要先创建一个错误处理函数,然后设置错误级别。语法如下:
set_error_handler(error_function,error_types)
参数描述如下:
error_function:规定发生错误时运行的函数。必需。
error_types:规定在哪个错误报告级别会显示用户定义的错误。可选。默认为“E_ALL”。
 
提示 如果使用该函数,会完全绕过标准PHP错误处理函数,如果有必要,用户定义的错误处理程序必须终止(die())脚本。
如果在脚本执行前发生错误,由于在那时自定义程序还没有注册,因此就不会用到这个自定义错误处理程序。这先实现一个自定义的异常处理函数
function myError($errno,$errstr,$errfile,$errline)
{
    echo "错误代码:[$errno] $errstr",'<br>';
    echo "错误执行的代码行:$errline",'<br>';
    echo "错误执行的文件:$errfile",'<br>';
    echo "PHP版本:",PHP_VERSION,"(" ,PHP_OS ,")",'<br>';
    die;
}
set_error_handler('myError',E_ALL|E_STRICT);
$a = array('o'=>2,4,5,6);
echo $a[o];
在这个函数里,可以对错误的详情进行格式化输出,也可以做任何要做的事情,比如判断当前环境和权限给出不同的错误提示,可使用errer_log函数将错误记入log文件,还可以细化处理,针对$errno的不同进行对应的处理。
自定义的错误处理函数一定要有这四个输入变量$errno、$errstr、$errfile、$errline。
errno是一组常量,代表错误的等级,同时也有一组整数和其对应,但一般使用其字符串值表示,这样语义更好一点。比如E_WARNING,其二进制掩码为4.,表示警告信息。
接下来,就是将这个函数作为回调参数传递给set_error_handler。这样就能接管PHP原生的错误处理函数了。要注意的是,这种托管方式并不能托管所有种类的错误,如E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING,以及E_STRICT中的部分。这些错误会以最原始的方式显示,或者不显示。
set_error_handler函数会接管PHP内置的错误处理,你可以在同一个页面使用restore_error_handler();取消接管。
 
(注意:如果使用自定义的set_error_handler接管PHP的错误处理,先前代码里的错误抑制@将失效,这种错误也会被显示)。
在PHP异常中,异常处理机制是有限的,无法自动抛出异常,必须手动进行,并且内置异常有限。PHP把许多异常看做错误,这样就可以把这些“异常”像错误一样用set_error_handler接管,进而主动抛出异常
原文地址:https://www.cnblogs.com/chenqionghe/p/4749787.html