PHP:spl_autoload_寄存器试图从错误目录加载文件
我正在尝试实现类的自动加载。我将我的类分为两个不同的文件夹:PHP:spl_autoload_寄存器试图从错误目录加载文件,php,Php,我正在尝试实现类的自动加载。我将我的类分为两个不同的文件夹: /classes /external 在我的external文件夹中,我保留了我在应用程序中使用的所有第三方内容。它可能包括类、函数等。我喜欢将它们与我自己的代码分开 我想手动包括外部目录中的所有内容。我只希望自动加载classes目录中的文件。以下是我所拥有的: 档案: /classes/cache.class.php /classes/db.class.php /classes.mail.class.php /external/
/classes
/external
在我的external
文件夹中,我保留了我在应用程序中使用的所有第三方内容。它可能包括类、函数等。我喜欢将它们与我自己的代码分开
我想手动包括外部
目录中的所有内容。我只希望自动加载classes
目录中的文件。以下是我所拥有的:
档案:
/classes/cache.class.php
/classes/db.class.php
/classes.mail.class.php
/external/hooks.php
和自动加载:
spl_autoload_register(function ($class_name) {
include dirname(__FILE__).'/classes/'.$class_name.'.class.php';
});
$Cache = new cache();
$Db = new db();
$Mail = new mail();
不知何故,这是试图加载外部
目录中存在的任何类。我知道这一点,因为在hooks.php
中,我有:
class Hooks { ... } // Notice the capital H
我得到了一个错误:
“警告:include(/path/to/classes/Hooks.class.php):无法打开流:没有这样的文件或目录”
如何使spl\u autoload\u register
忽略classes
目录之外的所有类?添加此选项
if (file_exists(dirname(__FILE__).'/classes/.$class_name.'.class.php'))
就在include之前,自动加载程序无法知道在哪个文件夹中定义了类。一般流程如下:
- 查看正在执行的代码中使用的未定义类
- 调用在spl_autoloader中注册的所有函数,并将未定义的类名传递给它们
谢谢。我只是不明白为什么它在其他目录中搜索,而不是停留在指定的目录中。你能解释一下原因吗?因为你没有展示整个代码,特别是调用
spl\u autoload\u register
的代码,所以我不能给你一个好的答案。最有可能的是,无论调用什么,它都会得到一个预设列表,以便首先尝试。