我面临的问题是在{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
跟随当前模式,而不更改文件名,类名或添加名称空间
答案 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。 希望这段代码可以帮到你。