【问题标题】:Cleaning up code for a custom exception class in PHP清理 PHP 中自定义异常类的代码
【发布时间】:2014-07-20 13:06:36
【问题描述】:

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

【问题讨论】:

  • 您确定例外是逻辑的正确位置,例如通过电子邮件发送自己的东西吗?为什么不直接捕获 PDOExceptions 并邮寄它们呢?您无法影响 PHP 将抛出哪些异常,因此像在第一个代码中一样捕获它们并处理它们 - 不要为了琐碎的事情将一个“转换”为另一个
  • codereview.stackexchange.com
  • 我想你要找的是a custom exception handler。基本上,这意味着 .. 不是您将拥有一种灵活、简单的方式来处理异常,而不是您想要的。
  • 我同意@kingkero 我认为您不想为此使用另一个Exception
  • 谢谢@kingkero。您可能会说,我对创建自定义异常的想法很陌生,我不确定什么是“最佳实践”;尽管根据您的评论,很明显我什至还不知道“良好做法”是什么!另外,根据您的想法,我不确定这个问题是否会有一个有意义的“答案”。如果您可以将他的评论移至建议的答案,那么我很乐意接受。

标签: php class pdo custom-exceptions


【解决方案1】:

我不认为异常是逻辑的正确位置,它应该包含有关错误的信息。 PDOException 很有用,因为您知道它源自您的 PDO 代码,如果您改为抛出 MyException,您至少需要提供更多(有用的)信息。

设置完成后,您应该阅读 BiVOC's comment 的原始问题。

如果您有a custom exception handler,则可以通过instanceof 进行区分。

function exception_handler($exception) {
    if ($exception instanceof PDOException) {
        //mail
    }
    //always log/etc.
}

【讨论】:

  • 感谢您对原始评论的扩展。
【解决方案2】:

不幸的是,您尝试执行的操作不会起作用,因为 PDO 代码中的任何内容都不会引发您的异常。所以你必须自己扔它,就像你在第一个例子中一样。

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

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多