Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.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 _uautoload()带有异常处理-浪费时间?_Php_Exception_Autoload - Fatal编程技术网

PHP _uautoload()带有异常处理-浪费时间?

PHP _uautoload()带有异常处理-浪费时间?,php,exception,autoload,Php,Exception,Autoload,我对OOP有点陌生,我正在为自己的应用程序开发一个“框架”。我有自己的自动加载功能,如下所示。。以及异常处理对象。我不会使用任何第三方插件(至少我不这么认为) 第一个问题:我应该在自动加载中处理异常,还是只是做得太多了 第二个问题:我的exceptionHandler类是一个公共函数……因为它将被许多其他应用程序使用,是这样吗?多谢各位 谢谢。非常感谢您的任何意见。 任何自动加载函数实际上并不意味着抛出异常,因为不清楚异常应该出现在哪里,您必须将整个代码包装在try-catch块中或定义异常处

我对OOP有点陌生,我正在为自己的应用程序开发一个“框架”。我有自己的自动加载功能,如下所示。。以及异常处理对象。我不会使用任何第三方插件(至少我不这么认为)

第一个问题:我应该在自动加载中处理异常,还是只是做得太多了


第二个问题:我的exceptionHandler类是一个公共函数……因为它将被许多其他应用程序使用,是这样吗?多谢各位

谢谢。非常感谢您的任何意见。


任何自动加载函数实际上并不意味着抛出异常,因为不清楚异常应该出现在哪里,您必须将整个代码包装在try-catch块中或定义异常处理程序

您应该通过
trigger\u error
触发一个错误,或者更好地让PHP告诉您什么类不能加载到发生错误的实际行中(因此忽略不存在的文件)


另外,对于第一个问题,您不应该使用
\u autoload
,而应该使用
spl\u autoload\u register

:不,您不应该

第一个原因:您应该始终能够链接多个自动加载器(请参见
spl\u autoload\u register
),因此,如果一个自动加载器失败,第二个自动加载器可能能够加载该类。因此,除非您确切知道自己在做什么,否则自动加载器不应该抛出任何错误

第二个原因:如果所有自动加载尝试都失败,php将触发一个错误。正确地记录php错误,您就不需要在自动加载器中记录这些错误

第三个原因:你的自动加载器将是一段代码,将执行很多。你不想在这里遇到“尝试/抓住”障碍


除此之外:如果自动加载您的
异常处理程序失败,会发生什么情况?

感谢您的反馈Jeffrey和Alexander。你们让我想。。最后,为了更简单(更快?)的方法,我移除了我自制的自动加载器

在我的配置文件中,我为核心应用程序类以及模块类添加了include路径:

set_include_path( get_include_path() . PATH_SEPARATOR . APPLICATION_ROOT . 'core' . DIRECTORY_SEPARATOR . PATH_SEPARATOR . APPLICATION_ROOT . 'module' . DIRECTORY_SEPARATOR );
spl_autoload_extensions( '.class.php' );
spl_autoload_register();

到目前为止,它是有效的:)

我以为我就是这么做的?如果它找不到文件(通过是可读的),它将不需要文件。然后它抛出一个异常..我遗漏了什么吗?谢谢“我的exceptionHandler类是一个公共函数”没有任何意义。我明白你的意思。我将类exceptionHandler设置为公共函数构造($exception,$level=“3”)。我是OOP新手。谢谢,我已经将此更改为spl_autoload_register()。最后一句话就是为什么这篇文章主要是关于。。谢谢你的洞察力。我将从自动加载中删除exceptionHandler。
set_include_path( get_include_path() . PATH_SEPARATOR . APPLICATION_ROOT . 'core' . DIRECTORY_SEPARATOR . PATH_SEPARATOR . APPLICATION_ROOT . 'module' . DIRECTORY_SEPARATOR );
spl_autoload_extensions( '.class.php' );
spl_autoload_register();