PHP自动加载不能使用另一个文件夹


PHP autoload can't use another folder

我有一个问题与类。我有3个文件夹,分别叫它们one, twothreeone文件夹功能,如控制器,two模型和three视图。我已经在two文件夹(模型层)中创建了自动加载类,但我不能调用另一个类。我的autoload.php文件如下所示:

<?php
function __autoload($class){
    include 'two/'.$class .'.php';
}
spl_autoload_register('__autoload');

如果我在index.php调用自动加载没有看到另一个只是什么在two文件夹,所以我不能从一个和三个文件夹调用方法。如何修复自动加载方法?

使用spl_autoload_register您可以注册多个自动加载器。但第一种方法是注册一个自动加载程序,检查$class.php是否存在于其中一个文件夹(one, twothree)中,并包含它。

spl_autoload_register(function ($className) {
    $folders = ['one', 'two', 'three'];
    foreach ($folders as $folder) {
        if (file_exists($path = $folder. '/'.$className .'.php')) {
            include $path;
            break;
        }
    }
});

但这也是一个有问题的方法。如果在onetwo目录中都有一个Foo类呢?你要进口哪个?要解决这些冲突,可以使用名称空间,并遵循PSR-0/4的指令。