spl_autoload和不同目录中的相同文件名

时间:2013-11-28 12:09:01

标签: php autoload

我面临的问题是在{1}}传递了spl_autoload_register回调,不会加载引用相同文件名但在不同目录中的类名。

我想要实现的是使用spl_autoload($class),而不使用spl_autoload而不使用名称空间,以自动加载以下类:

%Project_Path%/控制器/ test.php的:

require

%Project_Path%/模型/ test.php的:

class TestController {

}

我正在做的是用空字符串替换classname中的class TestModel { } Controller后缀,因此它将获得文件名Model lowercased为class Test,并且添加spl扩展名php应该转到test

在文件的开头,我已经设置了包含路径,以引用test.php,当前目录,pear目录和models目录。

如果有问题,我尝试了什么 - 这就是我尝试过的:) spl_autoload()没有收到路径,所以我必须更改包含路径以包含文件。

我成功地使用require和显式路径,然后是类名来实现它,但我怀疑是否可以使用controllers跟随当前模式,而不更改文件名,类名或添加名称空间

1 个答案:

答案 0 :(得分:0)

你可以尝试像文件一样的函数:XProject.class.php:

class XProject{
    public static function autoload($class) {
        //echo '>> auto load >'.$class.'<br>';

        if (file_exists(BASEPATH . 'core/lib/' . $class . '.class.php')) {
            require_once(BASEPATH . 'core/lib/' . $class . '.class.php');
        } elseif (file_exists(BASEPATH . 'core/utils/' . $class . '.class.php')) {
            require_once(BASEPATH . 'core/utils/' . $class . '.class.php');
        }
    }
}

和:

include BASEPATH.'core/lib/XProject.class.php';
spl_autoload_register('XProject::autoload');

在这个例子中,我认为%Project_Path%为BASEPATH。 希望这段代码可以帮到你。