Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 异常类应该有多具体?_Php_Exception - Fatal编程技术网

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很方便-有一个标准异常选择很好!谢谢,这正是我想知道的。我只是担心异常类可能会有点泛滥,但您的“相关且可复制”测试是一种很好的思考方式。