确保调用PHP关闭函数

时间:2011-05-10 07:17:55

标签: php exception callback shutdown

我正在尝试在PHP中捕获尽可能多的错误,并以非默认方式正确处理它们。我的问题在这个例子中得到了最好的说明:

<?php 

function errorHandler($errno, $errstr, $errfile, $errline){
    echo "Error handler here <br>\n";
    //throw new Exception($errstr);
}
function shutdownFunction() {
    echo "Hi I'm in here <br>\n";
}

set_error_handler("errorHandler");
register_shutdown_function("shutdownFunction");

try {
    $undefined->ok(); // causes some error
} catch(Exception $e) {
    echo "Caught the exception <br>\n";
}

将此代码作为PHP程序运行的结果将指示运行errorHandler(),打印PHP错误(如果“display_errors”设置为“On”),然后shutdownFunction()为运行

如果我取消注释异常抛出,我就会出现问题;我想尽可能多地抛出PHP错误的异常。如果我取消注释throw语句,则会调用错误处理程序,这会引发异常,从而导致进一步的错误,导致shutdownFunction()不被调用。

据我了解,我无法将此错误转化为可捕获的异常;但是,我至少希望确保调用shutdown函数而不限制我至少将某些 php错误作为异常捕获(意味着我不想删除throw errorHandler())中的陈述。

我是否可以通过errorHandler检查是否会抛出它会导致shutdownFunction()被绕过?

2 个答案:

答案 0 :(得分:2)

从错误处理程序中抛出异常,然后使用set_exception_handler处理未捕获的异常。

答案 1 :(得分:0)

所以我解决这个问题的方法是检查$ errstr参数是否以“Undefined variable”开头 - 如果是,那么我不会抛出异常。我想如果有任何其他错误有类似的问题,我会对那些做同样的事情。我找不到一个完整的php错误列表以及它们的影响,所以它必须是临时的