开发者社区> 问答> 正文

psr-4与spl_autoload_register 加载请教!?报错

我用composer 是用的psr-4 现在问题来了,我有些东西不想用composer来管理加载,我自己就想用spl_autoload_register 来加载其它的文件,但是我但凡在autoload 方法里执行类相关的立马抛出无法找到此类!特别郁闷!

代码:

//重载 autoloader
spl_autoload_register([__CLASS__, 'autoload'], true, true);
public static function autoload($className) {
 \xxx\xxx\xxx::init();//一执行到这儿就报xxx类找不到
}
Fatal error : Class 'xxx\xxx' 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自动载入还有什么意思呢?

展开
收起
爱吃鱼的程序员 2020-06-08 20:25:47 470 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    autoload里面应该是include文件啊,怎么会调用init()这种方法回复<aclass='referer'target='_blank'>@leo108:我此类里并没有单例也没有实例,就是纯静态类。init只是我打的一个方法。就算有此方法也不是需要实例化也不需要去单例。它就是一个静态方法回复<aclass='referer'target='_blank'>@邻里:你确定报的是Config类找不到的错么?你这样写,php每次遇到没加载过的类,就会执行一次Config::init(),多次init会不会有问题?此类早已载入,init只是我随意打的一个方法名称。我补充了内容上来!原因很简单,你需要在使用其他类的时候 unregister掉autoload的类~

    2020-06-08 20:26:06
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载