我已经在我正在研究的项目中挖了一个洞。我有这个庞大的项目(成千上万行),并且到处都有MySQL错误。我现在正在清理它们。
我有这个所有查询都经过的数据库类,所以我所做的就是每当出现SQL错误时,我现在就抛出一个异常。问题是我无法执行停止。它必须像往常一样继续,并且只记录异常,以便我可以跟踪它们并一次修复它们。
我希望set_exception_handler
可以做我想要的,但是文档特别说它会在调用我的处理程序后停止执行。那么我该如何解决这个问题?
异常可以暂停当前函数,但后来我希望它退出函数,可能返回null或false,然后继续正常,但我需要它来调用我的全局异常处理程序。
澄清:
我想从我的数据库类中抛出异常(每当出现SQL错误时)。然后,我想记录此错误和/或在屏幕上显示一条消息,直到我可以修复SQL错误,或者在try / catch中包装违规行。我不希望它停止执行。如果我只是调用一些error_handler()
函数而不是抛出异常,那么我就无法理解它。如果我立即捕获它(也在DB类中),那么我无法在堆栈中进一步捕获它(除非我重新抛出它,但之后我们又回到停止执行)。
答案 0 :(得分:1)
如果我理解正确的话:
function myFunction($params) {
try {
//your code which throws Exception
} catch (Exception $e) {
myErrorFunction($e);
return false;
}
}
答案 1 :(得分:0)
我想我找到了一个解决方法。我可以直接调用我的处理程序,而不是抛出异常:
global_exception_handler(new MySqlException($error_message));
这样我的处理程序仍会被调用,但执行仍在继续。
然后,仍然可以使用相同的异常处理程序来捕获实际抛出的所有其他异常:
function _global_exception_handler($e) {
// log error here
}
set_exception_handler('global_exception_handler');
答案 2 :(得分:0)
我知道旧帖子,但我也问了这个问题,发现答案是在您使用 try catch(Exception) 的顶部添加这一行:
<块引用>使用异常;