用户自定义函数的格式如下:
error_handler(int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]])
其中:
第一个参数 $errno 表示错误的级别,是一个 integer 类型;
第二个参数 $errstr 表示错误的信息,是一个 string 类型;
第三个参数 $errfile 是一个可选参数,表示发生错误的文件名,是一个 string 类型;
第四个参数 $errline 也是一个可选参数,表示发生错误的行号,是一个 integer 类型;
第五个参数 $errcontext 同样是一个可选参数(在 PHP7.2.0 之后被弃用),表示错误发生时活动符号表的 array。也就是说 $errcontext 会包含错误触发处作用域内所有变量的数组。用户的错误处理程序不应该修改错误上下文(context)。
注意:如果 set_error_handler() 函数返回 FALSE,标准错误处理程序将会继续调用。
2) $error_types 参数就像配置文件 php.ini 中 error_reporting 能够控制错误的显示一样,此参数能够用于屏蔽 $error_handler 的触发。如果没有该掩码,无论 $error_reporting 是如何设置的,$error_handler 都会在每个错误发生时被调用。
如果之前有定义过错误处理程序,则返回该程序名称;如果是内置的错误处理程序,则返回 NULL。如果指定了一个无效的回调函数,同样会返回 NULL。如果之前的错误处理程序是一个类的方法,此函数会返回一个带类和方法名的索引数组(indexed array)。
【示例】自定义一个错误处理函数,并使用它来处理程序中的错误。
<?php
function error_handler($errno, $errstr, $errfile, $errline ) {
echo "error number:".$errno."<br/>";
echo "error msg:".$errstr."<br/>";
echo "error file:".$errfile."<br/>";
echo "error line:".$errline."<br/>";
die('something error');
}
set_error_handler("error_handler");
strpos();
?>
运行结果如下:
error number:2 error msg:strpos() expects at least 2 parameters, 0 given error file:D:\WWW\index.php error line:10 something error