彻底搞懂Composer自动加载原理

小天天天天    PHP    255 次    2021-12-06 14:22:45


使用 composer 构建的 php 项目,在项目根目录下生成 vendor 目录,vendor 具体目录如下:

vendor/autoload.php 文件是 composer 自动加载的入口文件 (引导文件). 此文件做了两件事情:

  1. 加载文件 vendor/composer/autoload_real.php 文件 (该文件的作用下文说明)
  2. 实例化类 Composer\Autoload\ClassLoader

调用静态方法 get Loader () 方法获得 ClassLoader 实例

**
vendor/composer/autoload_real.php ** 此文件的核心任务是分别加载 composer 的配置文件:

  1. vendor/composer/autoload_classmap.php


返回 class 目录映射关系

  1. vendor/composer/autoload_namespace.php

命名空间和目录之间的映射关系

  1. vendor/composer/autoload_psr4.php (推荐使用)


符合 psr4 的命名空间之间映射关系

加载这些这些类和文件目录对应关系到内存中 , 一定要注意,这里只是加载类与文件的对应关系,并非真正的将所需的类文件加载到内存中 (这也说明了 composer 是惰性加载类的).

**
vendor/composer/ClassLoader.php(是和核心文件)**

核心代码是:


使用 php 提供的函数 spl_autoload_register 注册 loadClass 方法

loadClass 方法使用前文已经加载到内存中类与路径之间的关系,找到需要加载的文件,然后将其加载进来:

composer 第二次使用 include 函数

当实例化一个类,这个类不存在的时候,执行 loadClass 方法

总结:

composer 加载核心思想是通过 composer 的配置文件在引用入口文件 (autoload.php) 时,将类和路径的对应关系加载到内存中,最后将具体加载的实现注册到 spl_autoload_register 函数中。最后将需要的文件包含进来.


如果你觉得本篇文章对您有帮助,请打赏作者

最新评论

暂无评论

最新评论

网站数据

网站文章数:365

注册用户数:23

TOP