在PHP中清理自定义异常类的代码

时间:2014-05-30 17:27:43

标签: php class pdo custom-exceptions

我第一次使用自定义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“存在”?希望第三个问题有道理:我的直觉告诉我,如果我能做到这一点,那么我的方法应该是可能的。

2 个答案:

答案 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代码中的任何内容都不会引发您的异常。所以你必须自己抛出它,就像你在第一个例子中一样。

此外,第一个示例中的退出永远不会被命中。