5

作为一项规则,我会尽量避免抛出异常实例,因为这并不能传达太多关于哪里出了问题的信息。

但我发现我得到了相当多的空异常类,看起来像这样......

class DataNotFoundException extends Exception {
   // just a tagging class
}

所以在功能上该类与异常相同。唯一的功能意义是我现在可以做到这一点......

try {
    ... some code which throws exceptions ...
} catch (DataNotFoundException $dnfe) {
    ... do stuff ...
} catch (OtherException $oe) {
    ... do other stuff ...
}

我的问题是,拥有大量微小的异常类和只抛出异常实例之间的平衡点在哪里。有人对何时引入新的异常类有任何指导吗?

4

2 回答 2

2

当您有不同的逻辑来处理异常时,您必须始终扩展 Exception 类。寻找 php Spl 库,顺便说一下它包含一些异常类,所以你不需要自己定义。

于 2012-08-02T16:20:51.473 回答
1

包含许多特定异常并不是一个坏习惯,但只有那些相关且可重现的异常。如果您选择对他们进行非常具体的处理,那么它也应该按照特定的顺序进行;从非常具体到一般。

try {}    catch (CryptographicException e)
{ ...doSomething }

catch (ArgumentOutOfBoundsException e)
{ ...doSomething }

catch (Exception e)
{ ...doSomething }

这归因于对事件的处理,如果首先出现一般异常,则将跳过所有其他异常。在一般例外之前有特定例外也将有助于您从它们那里获得更多信息。

于 2012-08-02T16:35:31.693 回答