composer自动加载类使用和Autoload、Composer 原理解读

  • Cxb
  • 2019-11-18
  • 27

Composer我上几篇文章中提到是php的未来,为什么是php的未来呢?我们今天学习学习Composer

是自从 Composer 出现后,PHP 的依赖管理可以变得非常简单。程序内依赖一些类库和框架,直接使用 Composer 引入即可,通过使用 composer update 安装依赖的包。解决了过去加载外部库的各种难题。Composer 也有国内镜像,速度非常快。现在绝大部分PHP开源的项目都提供了 Composer 的支持,建议大家在项目中使用 Composer 来解决 PHP 代码包管理的问题,不要再使用下载源码、手工 include 的原始方法。

Composer自动加载第一步composer.json

在项目中创建一个composer.json文件

QQ截图20191118103332.png

其中autoload又包含主要的两个选项: files 和 psr-4。
files就是需要composer自动帮我们加载的函数库(不含类),只要在后面的数组中将函数库的文件路径写入即可。
psr-4顾名思义,是一个基于psr-4(http://www.php-fig.org/psr/psr-4/)规则的类库自动加载对应关系,只要在其后的对象中,以 "命名空间": "路径" 的方式写入自己的类库信息即可。
修改完成后,只要执行一下composer update,即可完成对应工作。

执行完成后会在项目中自动生成vendor文件证明composer执行成功~

这其实就是我刚刚在.json中添加的对应关系,他等于将.josn的配置文件,换成了php的形式。

QQ截图20191118105401.png

其执行了一个自动生成的类ComposerAutoloaderInit01b7e09d547451aa4077ac8d88fba6fc中的getLoader方法。
跟进:

QQ截图20191118105632.png

可以明显看到,他将autoload_namespaces.php、autoload_psr4.php、autoload_classmap.php、autoload_files.php等几个配置文件包含了进来,并进行了相关处理(setPsr4),最后注册(register)。
那么我们跟进register方法:

QQ截图20191118105759.png

这函数就一行,但简单明了,直接调用php自带的spl_autoload_register函数,注册处理__autoload的方法,也就是loadClass方法。再跟进loadClass方法:

QQ截图20191118105925.png

从函数名字就可以大概知道流程:如果存在$class对应的这个$file,则include进来。
那么进findFile方法里看看吧:

QQ截图20191118110010.png

通过类名找文件,最终锁定在findFileWithExtension方法中。

QQ截图20191118110103.png

最终实现将命名空间\类这样的类名,给转换成目录名/类名.php这样的路径,并返回完整路径。这里截图放不下,所我直截到了一半。

最后实现自动加载文件,这部我们就可以用namespace和use的方式使用自定义的类了

首先我们新建一个类

QQ截图20191118111144.png

申明命名空间和写一个魔术法法

然后创建一个php文件use这个类,浏览器输出;一定要注意引入autoload.php文件

QQ截图20191118112056.png

分享到:
0

说点儿什么吧

未经允许不得转载:

composer自动加载类使用和Autoload、Composer 原理解读

关于作者

头像

博客:爱一直在

博主:CXB

初心:技术和软文

简介:一个位90后站长,2016年入行,大学专业计算机应用(web前端),现从事php开发在物联网行业发展,一直潜心研究php和web前端技术,并写下相关软著三篇。希望利用博客和大家分享、学习IT技术知识以及记录我的个人点滴。我的性格乐天,自幼争强好胜,追求简单、喜欢学习、旅游、摄影、热爱生活、更爱敲代码。哈哈!!!

关于c69p|关于CXB|版权所有|湘ICP备17009938号