关于php:深入学习Composer原理四

本系列第四篇文章,也是最初一篇

首先,咱们先看看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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理