本系列第四篇文章,也是最初一篇
首先,咱们先看看 Composer 的源码从哪里看起。当然,请您先筹备好源码。
composer init 或者间接 install 之后,主动生成了一个 vendor 目录,这时您须要在文件中手动的 require 这个 vendor 目录下的 autoload.php 文件,其实这个文件又载入了 vendor/composer/autoload\_real.php。
在 autoload\_real.php 中,咱们发现了相熟的 spl\_autoload\_register 函数。但这个文件最大的作用是去加载 ClassLoader.php 这个文件和一些目录文件,也在同级目录下。这个文件就值得大家好好钻研下了,不过外围也无外乎后面三篇文章中的内容。然而在 autoload\_real.php 中,大家能够发现在调用 ClassLoader 的 register() 函数前,还加载了几个目录相干的文件:
- autoload\_static.php,动态加载形式,顶级类加载命名空间
- autoload\_psr4.php,恪守 PSR4 标准的包目录映射数组文件
- autoload\_namespaces.php,命名空间映射,PSR0 标准
- autoload\_classmap.php,类图映射,命名空间间接映射门路
好深奥的感觉,不过 PSR4 您肯定曾经很理解了。其余的其实就是对应的没有恪守 PSR4 标准的一些类库。而在 ClassLoader 中的 register() 函数就是加载的这些文件中对应的门路文件。在这里,最好的形式是您能够多下载一些包,而后看看这些文件产生了什么扭转。比方我装置了一个 monolog 后,autoload\_psr4.php 的内容变成了这样:
接下来,composer 这个命令干了什么您应该也就理解了。当您进行 composer require 时,首先批改了 composer.json 文件,而后下载包,实现后依据包里的 composer.json 文件中所对应的标准来批改对应的 autoload\_xxx.php 文件。实现了文件命名空间相干内容的映射。当 register() 进行加载的时候,天然就得心应手了。
ClassLoader 源码中重点浏览的一些函数内容包含:
- findFile()
- findFileWithExtension()
- addPsr4()
- add()
相干参考文档:
深刻解析 composer 的主动加载原理
Composer 概述及其主动加载探秘
Composer 文档
PSR 标准
至此,深刻学习 Composer 原理相干内容更新实现。其实还有更多能够学习的内容,比方装置时的 install 文件其实也是个 php 文件。composer 命令也是个 phar 文件,也就是齐全 PHP 实现的,源码的 Github 地址:https://github.com/composer/composer。兴许在未来咱们能够再深刻的钻研钻研外围 composer 命令行相干的源码。到那时,再开一个系列文章再说,而这回,就先到这里吧!!
关注公众号:【硬核项目经理】获取最新文章
增加微信 /QQ 好友:【xiaoyuezigonggong/149844827】收费得 PHP、项目管理学习材料
知乎、公众号、抖音、头条搜寻【硬核项目经理】
B 站 ID:482780532