用于通过php自动加载的Ajax文件的组织

时间:2019-07-09 19:46:34

标签: php ajax autoload organization

我想在我的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,我甚至不确定是否有可能,因为我读过一些东西,似乎表明无法使用“ ../使用自动加载器。

你能告诉我这样做有什么好方法吗?

1 个答案:

答案 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