异常类的具体情况如何?

时间:2012-08-02 16:14:32

标签: php exception

作为一项规则,我试图避免抛出Exception的实例,因为这并没有传达有关错误的信息。

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

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

因此,在功能上,该类与Exception相同。唯一的功能意义是我现在可以做到这一点......

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

我的问题是,在拥有大量微小的异常类和抛出异常实例之间的平衡点。有没有人有什么时候引入新的Exception类的指南?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

包含许多特定的例外情况并不是一个坏习惯,但只有相关且可以复制的例外情况。如果你选择对它们非常具体,那么它也应该按照特定的顺序排列;从非常具体到一般。

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

catch (ArgumentOutOfBoundsException e)
{ ...doSomething }

catch (Exception e)
{ ...doSomething }

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