Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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_Conventions_Zend Framework2_Code Standards - Fatal编程技术网

Php 如果一个类没有';不存在

Php 如果一个类没有';不存在,php,exception,conventions,zend-framework2,code-standards,Php,Exception,Conventions,Zend Framework2,Code Standards,如果一个类不存在,你应该抛出哪一个?在…的上下文中 在标准中,它说例外情况应该从一个扩展到另一个。我的第一个猜测是这是某种运行时异常 如果不存在自动加载,PHP会抛出运行时异常,对吗?因此,如果您的加载程序找不到类,它也应该这样做。(如果您正在编写自己的自动加载器)基于ZF2编码标准,它应该在加载器的异常名称空间内引发RunTimeException 因此,如果加载程序位于My\loader中,则运行时异常将位于My\loader\exception\RunTimeException中。取决于应

如果一个类不存在,你应该抛出哪一个?在…的上下文中

在标准中,它说例外情况应该从一个扩展到另一个。我的第一个猜测是这是某种运行时异常


如果不存在自动加载,PHP会抛出运行时异常,对吗?因此,如果您的加载程序找不到类,它也应该这样做。(如果您正在编写自己的自动加载器)基于ZF2编码标准,它应该在加载器的异常名称空间内引发RunTimeException


因此,如果加载程序位于My\loader中,则运行时异常将位于My\loader\exception\RunTimeException中。

取决于应用程序的上下文

如果您将类名作为方法参数接收,并尝试在同一方法中加载该类,则应使用InvalidArgumentException异常


如果从字段值或方法接收类名,则应使用RuntimeException

IMO,因为传递给autoloader的参数无效(它指定了无效的类名),这将是一个
InvalidArgumentException
。虽然我不确定这一点,因为文档似乎表明这应该用于无效类型的参数;来自自动加载程序,这将是无效参数。但是,如果您在使用
class\u exists()
检查类名后引发异常,该怎么办?
RuntimeException
表示,如果发生只能在运行时找到的错误,则引发
异常。
-对于未找到的类错误,我不同意这一点。如果该类不存在,则可以在运行时之前检测到该类。但这取决于你对“检测到”的定义——手册在这一点上有点不清楚。我个人认为抛出
InvalidArgumentException
更有意义,因为无论您是尝试自动加载还是仅仅执行
class\u exists()
,您传递的字符串表示一个无效的类名,因此是一个无效的参数。查看这篇博客文章:它可以为您提供一些线索。我会按照字面意思解释它——程序运行的时间(或期间)。在PHP中,这往往是非常短暂的,因为它所做的事情非常自然。如果您的应用程序是静态的,并且仅由您开发,那么您(或您的IDE)可以通过查看类是否存在来检测该类是否不存在。我想得越多,如果您费心检查类是否存在,那么您可能允许更多的动态行为,
RuntimeException
实际上可能更合适。但如果你想得太多,那么一切都是运行时错误。PSR-4的回答与此相反。这并不是说应用程序不能抛出异常,但应用程序的自动加载程序永远不应该抛出异常。我是PSR的粉丝,所以Seth说。