你什么时候在PHP中抛出一个DomainException?

osc*_*kuo 21 php exception

我正在浏览PHP中预定义的Exceptions列表,我注意到了DomainException.有人知道DomainException是什么意思吗?这是否意味着数据模型验证失败?

kar*_*m79 21

这里有一个非常热闹的讨论,关于没有人似乎知道什么意思:

http://bugs.php.net/bug.php?id=47097

从该链接的结尾:

域在这里表示数据域.这是一个DomainException一旦某个值不符合规定的有效数据域必须被抛出.例子:

  • 0不在分区域中.
  • Foo不在工作日的域名中.

第一个不同于超出范围和相似,但你可以使用 InvalidParameter,以防它实际上是执行除法的函数的参数.如果它是在执行除法之前在函数内部计算的值,然后执行预条件检查而不是执行除法,则它变为a DomainException.


Gra*_*ble 5

描述RangeException更有帮助:

抛出异常以指示程序执行期间的范围错误.通常这意味着除了/溢出之外还有一个算术错误.这是DomainException的运行时版本.

我认为它也适用于非算术,例如,请参阅此用户评论.

例如,如果您希望某个值位于集合中{'jpeg', 'png', 'gif', 'bmp'}并且您收到其他类似值'foo',则它是DomainException(逻辑)/ RangeException(运行时)的良好候选者.我很确定你能想到很多其他用例.


另外,我刚刚发现这篇有用的文章,它提供了比php.net更全面的解释: 如何使用内置的SPL异常类来更好地处理错误