【问题标题】:Easy way to list all of exceptions "try" block may produce列出“try”块可能产生的所有异常的简单方法
【发布时间】:2014-06-29 18:45:01
【问题描述】:

有什么简单的方法可以查明try 块中我可以预期哪些类型的异常?假设我有:

<?php
try {
    foo();
} catch (\A\B\FooException $e) {

} catch (\A\B\BarException $e) {

}

是否有任何工具可以为我检查foo() 代码并列出我可以预期的所有异常类型?因此,如果我忘记了 \A\B\BazException,我可以轻松添加另一个 catch,感谢该列表。现在我使用搜索“例外”,但有时会有很多相同的结果。

【问题讨论】:

  • 一些 IDE 可以做到这一点,比如 PhpStorm。他们可以自动创建文档块,其中列出了方法的所有异常类型。不确定这是否也考虑嵌套调用,或者创建一个方法可能以这种方式抛出的所有可能异常的列表还有多少工作要做。但值得一看。
  • @deceze 是的,PhpStorm 可以做到,但正如您所提到的 - 仅适用于方法级别,它无法发现下面发生的事情。

标签: php exception


【解决方案1】:

我不知道有什么工具可以做到这一点。但您至少可以创建以下代码块:

catch (Exception $e) { 
    mysql_query("INSERT INTO exceptions_tb ('exception_name','expection_message') VALUES ('"+$e->class+"', '"+addslashes($e->message)+"')  excetption ", $conn);
}

在咨询了所有单元测试中发生的异常变化之后。或者简单地说,您可以在单元测试中采用所有可能的方式并输入数据类型,看看会出现哪些异常。 我不相信有一个工具可以为你做到这一点,因为该工具现在需要所有可能的输入和 php 变量不是预定义的类型。

【讨论】:

  • 感谢您的回答,但我发现它没有比搜索包含异常的文本更有用。使用您的解决方案,我需要依靠完美的单元测试(我不能)或等待一些我显然不想看到的异常实际发生:-) 无论如何,在特定 try 块中记录异常是很聪明。
【解决方案2】:
...
catch (Exception $oError) {
    Logger::logError($oError);
}

class Logger
{    
    public static function($oError){
        // do here detection you like\want
        // you can use loops and pre-def. instances of errors

        if ($oError instanceof ExceptionCustom)
            // some actions
        }
        ...
    }

}

class ExceptionCustom extends Exception { 
    // http://www.php.net/manual/en/language.exceptions.extending.php
    //...
}

这只是样本,基本的东西。你可以\应该按照你想要的方式让它变得更复杂。

添加: 您将决定的主要事情,什么错误以及您应该做什么,只有在您收到异常之后,当然您应该为其创建默认操作(无论抛出什么异常)。

【讨论】:

  • 您的答案似乎与@developer3466402 的答案几乎相同。它需要等待异常。我想在它发生之前做好准备。
  • 没有办法获取所有异常列表即可。为什么?假设您的团队中有 4 名成员。每个人都有自己的异常,因此 php 不会对您的异常做出反应,而是对您的团队成员异常做出反应。所以最重要的是,所有异常都从一个 Exception 类扩展,这就是为什么每个人都会检查“之后”,并且每个成员(团队中)都添加其 catch 方法,因为没有人可以获得所有异常列表,请考虑一下。 $)
  • 可以有一个解决方案,但我认为你不能使用它。在系统(我的意思是整个代码)中,所有异常都必须在某处注册。你可以让他们使用它(注册)。但我不知道这样的 MVC\CMS,所以这只是想法(不是解决方案)。
猜你喜欢
  • 2011-02-04
  • 2019-06-20
  • 1970-01-01
  • 2011-12-21
  • 2012-08-11
  • 2013-06-09
  • 1970-01-01
  • 2013-10-18
  • 2016-08-13
相关资源
最近更新 更多