我第一次使用自定义PHP异常,并希望在清理一些代码时提供一些帮助。特别是,我正在捕捉PDO错误,并编写了一个类来向自己邮寄错误的堆栈跟踪。我目前正在做的事情如下:
try {
//db stuff
} catch (PDOException $e) {
throw new My_Own_Exception($e);
exit;
}
我的My_Own_Exception通过以下方式完成工作:
class My_Own_Exception extends Exception
{
/*code to mail myself error info: this part works!
}
虽然上述方法有效,但我觉得我应该能够写出更清洁的内容,例如:
try {
} catch (My_Own_Exception $e) {
exit;
}
其中My_Own_Exception是PDOException类的扩展。关于这个的一些问题:首先,第二种方法是更好的方法吗?第二,如果是的话,有可能吗?第三,如果可能的话,如果My_Own_Exception从未在任何地方实例化,我怎么让PHP知道My_Own_Exception“存在”?希望第三个问题有道理:我的直觉告诉我,如果我能做到这一点,那么我的方法应该是可能的。
答案 0 :(得分:1)
我不认为异常是逻辑的正确位置,它应该包含有关错误的信息。 PDOException
非常有用,因为您知道它来自您的PDO代码,如果您抛出MyException
,则需要至少提供更多(有用)信息。
如果设置完毕,您应该在原始问题上阅读BiVOC's comment。
如果您有a custom exception handler,则可以通过instanceof
进行区分。
function exception_handler($exception) {
if ($exception instanceof PDOException) {
//mail
}
//always log/etc.
}
答案 1 :(得分:0)
您要做的事情不会起作用,因为不幸的是,PDO代码中的任何内容都不会引发您的异常。所以你必须自己抛出它,就像你在第一个例子中一样。
此外,第一个示例中的退出永远不会被命中。