彻底搞懂Composer自动加载原理

原创2021-10-31 23:53·烟花1219

彻底搞懂Composer自动加载原理

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

彻底搞懂Composer自动加载原理

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

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

彻底搞懂Composer自动加载原理

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

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

  1. vendor/composer/autoload_classmap.php

彻底搞懂Composer自动加载原理

返回class目录映射关系

  1. vendor/composer/autoload_namespace.php

彻底搞懂Composer自动加载原理

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

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

彻底搞懂Composer自动加载原理

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

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

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

核心代码是:

彻底搞懂Composer自动加载原理

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

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

彻底搞懂Composer自动加载原理

composer第二次使用include函数

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

总结:

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

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 2年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2
pndx

mark

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!