Composer自动加载原理
autoload.php
入口文件autoload.php中非常简单, 引入了autoload_real.php并调用了ComposerAutoloaderInitXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX::getLoader()
autoload_real.php
1 | spl_autoload_register(array('ComposerAutoloaderInitXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'loadClassLoader'), true, true); |
getLoader中首先注册了自身的loadClassLoader方法用于自动加载ClassLoader.php, 在加载完成后马上注销了该自动加载
然后分别注册autoload_namespaces, autoload_psr4, autoload_classmap
可以看到这几个文件中保存的都是类似 类名 => 位置的键值对
接着$loader->register(true);进行注册
最后引入autoload_files
ClassLoader.php
1 | public function register($prepend = false) |
在register方法中将自身的loadClass方法注册为自动载入实现
剩下的就比较简单了
loadClass中的findFile通过类名在autoload_real.php中注册的几坨键值对去查找对应的位置, 找到就加载