为什么我的自定义错误处理程序未调用?

ope*_*rog 3 php error-handling

当我的脚本开始时,我有:

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
Run Code Online (Sandbox Code Playgroud)

然后,我用PHP注册我的自定义错误处理程序:

function handleError($code, $text, $file, $line) {
    echo "&%!!";
    return true;
}

set_error_handler('handleError');
Run Code Online (Sandbox Code Playgroud)

接下来,有一些代码会产生如下错误:

致命错误:在第32行的/Applications/MAMP/htdocs/mysite/classes/Test.php中调用未定义的方法DB :: getInstanceForDB()

无论我是否指定自定义错误处理程序,我一直在使用调用堆栈和我网站上的所有内容获取标准PHP错误消息框.知道什么是错的吗?

编辑:无论我是否返回true,它都不会调用我的自定义处理程序.

phi*_*reo 6

首先,您需要使您的错误处理函数返回true.来自set_error_handler:

如果函数返回FALSE,则继续执行正常的错误处理程序.

其次,要注意致命错误不会被处理set_error_handler.您还需要使用register_shutdown_function.所以你的代码应该是这样的:

// Handles non-fatal errors
function handleError($code, $text, $file, $line) {
    var_dump($code);
    return true;
}
set_error_handler('handleError');

// Handles fatal errors
function fatalShutdown() {
    var_dump(error_get_last());
}
register_shutdown_function('fatalShutdown');
Run Code Online (Sandbox Code Playgroud)