我想在我的php项目中使用自动加载器,但我不知道我的文件组织是否可行。现在我的文件夹是这样构造的:
-ProjectFolder
index.php
-common
-ajax
ajax_file.php
-classes
MyClass.php
在MyClass.php中,我有以下代码行namespace common\classes;
。
在index.php中,我有
spl_autoload_register(function ($class_name){
$file = str_replace('\\', '/', $class_name);
require "$file.php";
});
因此,我可以在代码中包含以下行,从而将index.php文件称为“测试”静态方法:
common\classes\MyClass::test();
但是使用index.php从ajax_file.php获取答案。 如果我只是通过将同一行代码添加到ajax_file.php中来调用“测试”方法,则会告诉我找不到该类。我想这是因为它是独立于index.php中的内容加载的。
我不知道如何从ajax_file.php访问MyClass,我甚至不确定是否有可能,因为我读过一些东西,似乎表明无法使用“ ../使用自动加载器。
你能告诉我这样做有什么好方法吗?
答案 0 :(得分:1)
您必须确保自动装带器使用绝对路径而不是相对路径。
这涉及为与projectFolder
对应的根名称空间定义一个基本目录。
在index.php中:
spl_autoload_register(function ($class_name) {
$file = __DIR__ . '/' . str_replace('\\', '/', $class_name);
require "$file.php";
});
您在php-fig上有一些自动装带器示例,它们符合标准(PSR-4)。
请注意, ajax_file.php 文件必须明确包含自动加载器(因此, index.php )