Php 异常类应该有多具体?
作为一项规则,我尽量避免抛出异常实例,因为这并不能传达出很多关于出错原因的信息 但是我发现我得到了相当数量的空异常类,看起来像这样Php 异常类应该有多具体?,php,exception,Php,Exception,作为一项规则,我尽量避免抛出异常实例,因为这并不能传达出很多关于出错原因的信息 但是我发现我得到了相当数量的空异常类,看起来像这样 class DataNotFoundException extends Exception { // just a tagging class } 因此,该类在功能上与Exception相同。唯一的功能意义是我现在可以做这个 try { ... some code which throws exceptions ... } catch (DataNo
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 ...
}
我的问题是,拥有大量微小异常类和仅仅抛出异常实例之间的平衡在哪里。是否有人对何时引入新的异常类有任何指导原则?当您有不同的逻辑来处理异常时,必须始终扩展异常类。查找php Spl库,顺便说一句,它包含一些异常类,因此您不需要定义自己的异常类。包含大量特定异常并不是一个坏做法,但只包含相关的和可复制的异常。如果你选择非常具体地对待他们,那么也应该按照特定的顺序进行;从非常具体到一般
try {} catch (CryptographicException e)
{ ...doSomething }
catch (ArgumentOutOfBoundsException e)
{ ...doSomething }
catch (Exception e)
{ ...doSomething }
这归因于事件的处理,如果首先出现一般异常,则将跳过所有其他异常。将特定异常置于常规异常之前将有助于您从异常中获取更多信息。如果您确切知道抛出的异常类型,您可以控制它输出的错误消息,覆盖现有功能并定义其他功能。通过不同的逻辑,您的意思是像我问题中代码中的两个catch子句一样?啊,SPL很方便-有一个标准异常选择很好!谢谢,这正是我想知道的。我只是担心异常类可能会有点泛滥,但您的“相关且可复制”测试是一种很好的思考方式。