【发布时间】:2016-08-15 10:02:16
【问题描述】:
我已经开源了一个math library for PHP,它定义了它的own hierarchy of exceptions:
现在 PHP 7 已经登陆,我意识到一些异常在引入新的Error 类时感觉有点多余:
让我们暂时忘记 PHP 5,并假设该库仅针对 PHP 7。
- 我应该扔
ArithmeticError并放弃我的ArithmeticException吗? - 同样,我应该扔掉
DivisionByZeroError并放弃DivisionByZeroException吗? - 应该
RoundingNecessaryException和NumberFormatException扩展ArithmeticError? - 在这种情况下,它们应该被称为
RoundingNecessaryError和NumberFormatError吗?
乍一看,重新声明在语言中具有本地等效项的异常似乎很奇怪。
同时,虽然没有什么能阻止用户空间代码抛出 Error,但我觉得这些类是由 PHP 本身设计的,用户空间库最好抛出 Exception 而不是 @987654342 @。
在这个问题上是否有共识?
【问题讨论】:
-
致投票结束的人:投票结束一个问题的依据是“这个问题的答案几乎完全基于意见,而不是事实、参考资料或特定专业知识。”适得其反,有点“射击信使”。即使我们决定基于意见的答案(什么样的答案不是?)是一件坏事,然后谴责答案,而不是问题.尝试合作,嗯?判断一个情况的整体价值,而不是规则书中的诫命。如果你没有任何有用的东西要添加,只需慢跑。
-
TBH,我知道这个问题将成为“主要基于意见”的强迫选民的目标。我尽力寻求共识,而不是意见。也许创建Throwable RFC 的人写了一些关于这个主题的东西。也许对此有一个半官方的答案。谁知道。无论如何,我需要问!
-
PHP 错误异常旨在在发生 programmer 错误的情况下引发。无可否认,抛出的任何错误都应该与代码中的实际错误相关联。如果您对 Error 或其子类的使用符合此约束,您可以在代码中使用它们。 (这也意味着你不应该捕获这些异常,除非在你的顶级处理程序或非常不寻常的情况下。如果你的异常应该被捕获,那么 Error 不适合你。)
-
@NikiC 这是对我的例外情况的一个很好的反思。我想在某些情况下捕获 DivisionByZero 或 RoundingNecessary 异常是有意义的,甚至更多的是 NumberFormatException,尤其是在处理用户输入时。