2012-08-10 81 views
3

如果某个类不存在,应抛出哪个PHP SPL Exception?在ZF2 coding standards for exceptions的范围内。如果一个类不存在,应抛出哪个PHP SPL异常

在标准中说例外应该从PHP's SPL Exceptions之一延伸。我的第一个猜测是它是某种RuntimeException。

PHP SPL Exceptions

+0

IMO这将是一个'InvalidArgumentException'因为传递到自动加载的说法是无效的(它指定无效类名称)。虽然我不确定这一点,因为文档似乎表明这应该用于无效*类型*的参数。 – DaveRandom 2012-08-10 10:22:07

+0

我同意;从一个自动加载器,这将是一个无效的论点。但是如果在使用'class_exists()'检查类名后引发异常呢? – gawpertron 2012-08-10 10:30:02

+0

@gawpertron再次你会做'class_exists(“MyClass”)'如果类不存在则作为参数传递,然后抛出'InvalidArgument'或者'RuntimeException'我认为很好抛出.. – Gntem 2012-08-10 10:36:09

回答

2

取决于您的应用程序的上下文。

如果您将类名作为方法参数接收,并且您尝试使用相同的方法加载该类,那么应该使用InvalidArgumentException异常。

如果从一个字段值或从方法接收类的名字,那么你应该使用RuntimeException的

-1

如果自动加载不存在PHP会吐出一个RuntimeException吧?因此,如果找不到该类,则加载器应该执行相同的操作。 (如果你正在编写你自己的自动加载器)基于ZF2编码标准,它应该在加载器的异常名称空间内引发一个RunTimeException。

因此,如果您的加载程序位于My \ Loader中,那么您的运行时异常将位于My \ Loader \ Exception \ RunTimeException中。

+1

PSR-4说这个答案的相反。 [“自动加载器实现不能抛出异常,不能引发任何级别的错误,并且不应该返回一个值。”](http://www.php-fig.org/psr/psr-4/)这不是说应用程序不能抛出异常,但应用程序的自动加载器从不应该这样做。 – 2015-12-11 15:47:11

+0

我是PSR的粉丝,所以塞思说。 – 2015-12-30 15:11:36

相关问题