【发布时间】:2012-08-10 10:15:30
【问题描述】:
如果一个类不存在,你应该抛出哪个PHP SPL Exception?在ZF2 coding standards for exceptions 的上下文中。
在标准中,它说异常应该从PHP's SPL Exceptions 之一扩展。我的第一个猜测是它是某种 RuntimeException。
【问题讨论】:
-
IMO 它将是
InvalidArgumentException,因为传递给自动加载器的参数无效(它指定了无效的类名)。虽然我不确定这一点,因为文档似乎表明这应该用于无效 type 的参数。 -
我同意;来自一个无效参数的自动加载器。但是,如果您在使用
class_exists()检查类名后抛出异常怎么办? -
RuntimeException说Exception thrown if an error which can only be found on runtime occurs.- 对于未找到类的错误,我不同意这一点。如果该类不存在,则可以在运行前检测到。但这取决于您对“检测到”的定义-手册在这一点上有点不清楚。我个人觉得抛出InvalidArgumentException更有意义,因为无论您是尝试自动加载还是仅仅执行class_exists(),您传递的字符串都表示无效的类名,因此是无效的参数。 -
看看这篇博文:codeutopia.net/blog/2011/05/06/…它可以给你一些线索。
-
好吧,我会按字面意思解释它——程序运行的时间(或期间)。在 PHP 中,这往往是非常短暂的,因为它所做的事情的本质。如果您的应用程序是静态的并且仅由您开发,您(或您的 IDE)可以通过查看该类是否存在来检测该类是否存在。我想得越多,如果您费心检查一个类是否存在,您可能会允许更多的动态行为,
RuntimeException实际上可能更合适。但如果你想太多,那么 everything 就是运行时错误。
标签: php exception conventions zend-framework2 code-standards