我正在尝试在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()
被绕过?
答案 0 :(得分:2)
从错误处理程序中抛出异常,然后使用set_exception_handler处理未捕获的异常。
答案 1 :(得分:0)
所以我解决这个问题的方法是检查$ errstr参数是否以“Undefined variable”开头 - 如果是,那么我不会抛出异常。我想如果有任何其他错误有类似的问题,我会对那些做同样的事情。我找不到一个完整的php错误列表以及它们的影响,所以它必须是临时的