composer autoload原理浅析

最近读了一点laravel的代码,里面用到composer,感觉其中的autoload机制有点诡异,翻阅源码,有所得,故记载之。
使用composer下载包之后,需要require "vendor/autoload.php",所以就从入口文件着手。
1.autoload.php => composer/autoload_real.php/getLoader() => $loader = new \Composer\Autoload\ClassLoader();
2.之后根据php的版本会有不同的处理,但实质效果是一样的,都是为了初始化$loader->prefixLengthsPsr4、$loader->prefixDirsPsr4、$loader->prefixesPsr0和
$loader->classMap这些变量,只是利用不同版本的php特性提高实现性能而已。涉及到的文件为autoload_namespaces.php,autoload_psr4.php,autoload_classmap.php。
这些文件主要保存的是类名起始名称与文件之间的对应关系,比如'App\\' => array($baseDir . '/app'),实质上就是所有出现的以App\开始的类名都在文件夹app下面。
App\Events\Event类的位置自然就在app\Events文件夹的Event文件之中定义。
3.调用$loader->register(true);注册Composer\Autoload\ClassLoader\loadClass函数为autoload函数,当类名找不到时触发autoload函数的执行。
4.Composer\Autoload\ClassLoader\loadClass函数主要就是findFile&&includeFile了,寻找文件的方法就是依次查找2中所保存的映射关系。
这样所有namespace命名的规则就很清晰了,比如文件夹app\Http文件夹下新建文件Kernel.php,那么应该在Kernel文件中定义类Kernel如下
namespace App\Http;
class Kernel {
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值