我用composer 是用的psr-4 现在问题来了,我有些东西不想用composer来管理加载,我自己就想用spl_autoload_register 来加载其它的文件,但是我但凡在autoload 方法里执行类相关的立马抛出无法找到此类!特别郁闷!
代码:
//重载 autoloader
spl_autoload_register([__CLASS__, 'autoload'], true, true);
public static function autoload($className) {
xxxxxxxxx::init();//一执行到这儿就报xxx类找不到
}
Fatal error : Class 'xxxxxx' not found
难道我用了psr-4我就不能再加载我自己定义的了吗?psr-0则好像没这个问题。
感谢一楼 二楼的回答。我把代码贴下
public function test(){
\HF\Core\Config::get('keh'); //不会报错
//重载 autoloader
spl_autoload_register([__CLASS__, 'autoload'], true, true);
}
/**
* 自动加载
* @param $className
* @return bool
*/
public static function autoload($className) {
\HF\Core\Config::get('keh');//这里报错 提示找不到Config类
}
Config.php 这个文件是随Composer一早就载入了。工在上面test()方法里调用 都不传颂 报错的。但是我在test 方法里用了sql_autoload_register 因为我要载入我其它的类。它也不可能随composer来。但是我的Config是个核心类,我要取得各种配置合并配置都需要使用到它。所以来到autoload方法里面来 我调用Config类里的方法 直接就报找不到Config 这个类。这个类跟单例不单例 实例不实例没关系。在同一个类里,Test 方法都能调用它,唯有在spl_autoload_reigest注册的方法里无法载入类。难道我还要需要再引入一次?如果我再引入一次那我的composer自动载入还有什么意思呢?
你的xxx类是需要用自己的autoload还是composer的去加载?
如果你的xxx类需要自己加载,那肯定要在你自己的autoload函数里require啊。
如果你的xxx类可以用composer加载,只要在composer之后注册就可以了:
或
针对问题补充,我想还原一个最小化的场景:
index.php
Config.php
composer.json
看一下和你的情况有什么区别?
我明白你的意思,xxx类是单例模式吧,你是想在第一次用到该类到时候,就调用xxx::init()去初始化类实例。
对吧?
但是,你的spl_autoload_register 先于composer运行,所以没有composer去帮你require这个类文件,你在这里直接使用,当然会报错 类不存在。
所以解决方法很简单,那就是你在xxx::init();之前,先require这个类文件。就好了。