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

首先,我们先看看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命令行相关的源码。到那时,再开一个系列文章再说,而这回,就先到这里吧!!

composer更新_深入学习Composer原理(四)相关推荐

  1. composer 路径_深入学习Composer原理(三)

    本系列第三篇文章,一起了解下PSR规范中的PSR4和PSR0规范 首先恭喜大家,包括我自己,坚持到了现在.这篇文章之后,Composer的基础原理就清晰明了咯.也就是说,Composer所利用的正是s ...

  2. python原理_强化学习:原理与Python实现

    强化学习:原理与Python实现 作者:肖智清 著 出版日期:2019年08月 文件大小:17.18M 支持设备: ¥60.00 适用客户端: 言商书局 iPad/iPhone客户端:下载 Andro ...

  3. composer 更新php位置,使用composer安装/更新PHP包

    composer是PHP用来管理PHP依赖关系的工具. 安装composer 1 2curl -s https://getcomposer.org/installer | php sudo mv co ...

  4. 片偏移怎么计算_计算机网络学习笔记(四)之网络层

    点击蓝字关注我吧 越努力越幸运!!! 1 网络层的功能 1.1异构网络互联 网络的互联:指将两个以上的计算机网络,通过一定的方法, 用一种或多种通信处理设备(即中间设备)相互联接起来,以构成更大的网络 ...

  5. 平潭迁移库是什么意思_迁移学习》第四章总结---基于模型的迁移学习

    基于模型的迁移学习可以简单理解为就是基于模型参数的迁移学习,如何使我们构建的模型可以学习到域之间的通用知识. 1. 基于共享模型成分的迁移学习 在模型中添加先验知识. 1.1 利用高斯过程的迁移学习 ...

  6. list取值_深入学习Redis(四),基本类型【List】剖析

    接下来我们要剖析的基本类型是List,相信大家对List都不会陌生吧,下面我们将深入源码剖析Redis中List的实现. 存储类型 存储有序的字符串(从左到右),元素可以重复.可以充当队列和栈的角色. ...

  7. python bp神经网络分类预测结果图_深度学习入门(四)BP神经网络——数字分类...

    采用的是python中机器学习库sklearn图片数据 sklearn简要介绍: #sklearn是Python中的一个机器学习包 from sklearn.datasets import load_ ...

  8. 深度学习算法原理_用于对象检测的深度学习算法的基本原理

    深度学习算法原理 You just got a new drone and you want it to be super smart! Maybe it should detect whether ...

  9. 强化学习教程(四):从PDG到DDPG的原理及tf代码实现详解

    强化学习教程(四):从PDG到DDPG的原理及tf代码实现详解 原创 lrhao 公众号:ChallengeHub 收录于话题 #强化学习教程 前言 在前面强化学习教程(三)中介绍了基于策略「PG」算 ...

最新文章

  1. Android应用实例收藏管理
  2. c++ main函数调用 类中的枚举_为啥用枚举,枚举有哪些用法?
  3. 如何在电脑上安装python-在电脑上安装python的方法
  4. session_start() 对 HTTP_REQUEST扩展/fsockopen函数 的影响
  5. 修身论文2000字_软考论文怎么写
  6. html中的盒子设置时间设置,CSS中的间距设置与盒子模型
  7. mysql 5.5 udf_MYSQL5漏洞之udf提权
  8. C#课外实践——校园二手平台(心得篇)
  9. 《通信原理》复习笔记10----第十章模拟信号的数字传输及相关例题(重点及难点)
  10. 【Windows远程桌面】RDP Wrapper 监听器状态为 Not listening [not supported] 的解决方法
  11. 国内的9家域名顶级注册商
  12. 【运筹学】整数规划 ( 整数规划求解方法 | 指派问题 )
  13. excel保存快捷键_只会用Ctrl+C和Ctrl+V怎么行?真正的Excel高手都是快捷键达人!...
  14. 利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能
  15. 2021.10.25-10.31 AI行业周刊(第69期):AI进化之路
  16. java中求某个时间跳过节假日和周末
  17. Eclipse 设置护眼背景色
  18. swagger添加权限验证,swagger安全控制
  19. VS2019未定义标识符detect该怎么解决
  20. 此情可待成追忆——九山顶畅游随想曲(九)

热门文章

  1. 面试中多说这么一句话,薪水直接涨5k
  2. 必须了解的mysql三大日志-binlog、redo log和undo log
  3. 光大银行分布式实战:国内最大缴费平台的数据库架构转型
  4. Redis 6.0 新特性-多线程连环13问!
  5. 为什么曾经厉害的人突然不厉害了?
  6. 分析 JDK 源码丨Java Thread
  7. 【面试】足够应付面试的Spring事务源码阅读梳理(建议珍藏)
  8. 为什么大型互联网都爱用kafka?
  9. 代码改变世界,这 72 张面孔牛逼了!!!
  10. OKR能带来哪些价值