Composer自动加载源码分析
加载的文件
- vendor/autoload.php,入口文件
- vendor/composer/autoload_real.php,主文件
- vendor/composer/ClassLoader.php,处理psr0、psr4、classMap、files的类
- vendor/composer/autoload_static.php,提供psr0、psr4、classMap、files
处理流程
- autoload_real.php中会实例一个ClassLoader
- autoload_real.php中将autoload_static的元素set到ClassLoader
- zend_loader_file_encoded,判断没有zend加密就只加载autoload_static.php(一般都走这个)
- 否则就加载autoload_namespaces.php、autoload_psr4.php、autoload_classmap.php、autoload_files.php
- psr0、psr4、classMap会提供spl_autoload_register注册加载方法
- files会直接include
composer配置说明
- require是直接用第三方包,autoload是引用本地的
- require-dev 和 autoload-dev 只在根包起作用
- 假设A包的composer配置了require-dev,此时B包配置使用A包,A包的require-dev部分是无法用的。
- 执行了composer dumpautoload后,classmap会包含psr0和psr4的对应关系:https://stackoverflow.com/questions/22803419