对于那些希望在错误中使用自己的文件或行号(可能使用 debug_backtrace())而不是由 trigger_error() 创建的那些行号的用户,这里有一个解决方案。
创建一个自定义函数来处理 E_USER_ERRORs,该函数只需输出错误类型和消息,同时排除 trigger_error() 报告的行号和文件。您也可以根据需要配置它来处理用户警告和通知(我在下面的示例中进行了配置)。
<?php
function error_handler($level, $message, $file, $line, $context) {
if($level === E_USER_ERROR || $level === E_USER_WARNING || $level === E_USER_NOTICE) {
echo '<strong>错误:</strong> '.$message;
return(true); }
return(false); }
function trigger_my_error($message, $level) {
$callee = next(debug_backtrace());
trigger_error($message.' in <strong>'.$callee['file'].'</strong> on line <strong>'.$callee['line'].'</strong>', $level);
}
set_error_handler('error_handler');
function abc($str) {
if(!is_string($str)) {
trigger_my_error('abc() expects parameter 1 to be a string', E_USER_ERROR);
}
}
abc('Hello world!'); abc(18); ?>
这是一个非常简单的概念,我相信大多数人都知道这一点,但对于那些不知道的人,就让它作为一个很好的例子吧!