composer 自动载入的简单理解

79 篇文章 1 订阅

psr4 :

结合命名空间自动加载(前提是要加载的类指定了命名空间,即有namespace,否则找不到)

"APP\\":"application/"表示APP命名空间对应application目录

(只针对类文件,类文件必须包含有命名空间,后缀必须是.php)


classmap:

自动加载指定文件(前提是后缀是.php或.inc)  或 自动加载指定文件夹里面所有.php和.inc后缀文件的所有类

"application\libs\"表示自动加载application\libs\下的所有文件(只包括后缀.php和.inc的文件)

(只针对类文件,类文件不需要包含命名空间;

如果包含了命名空间,直接按命名空间实例化;

如果没有命名空间,直接按类名实例化)


files :

自动加载指定文件里面的所有函数

(只针对函数文件)


psr0:不推荐用,这里不总结,和psr4差不多。


psr4 生成的映射在 vendor/composer/autoload_psr4.php
classmap 生成的映射在 vendor/composer/autoload_classmap.php
files 生成的映射在 vendor/composer/autoload_files.php


composer自动加载执行过程


composer核心处理类就是 vendor/composer/autoload_real.php这个类,它做的事情就是把psr-0,psr-4,classmap以及files四种方式加载的类注册到vendor/composer/ClassLoader类下。


classMap    -> ClassLoader的classmap数组中
psr-0 psr-4 ->  namespace注册到相应数组中
files中定义的文件全部放在全局变量$GLOBALS['_composerautoload_files']中


上面的类注册后,会执行vendor/composer/ClassLoader类的register方法,将该类下的loadClass方法注册到类加载队列中,之后当new一个新的类的时候,php会在所有注册的类加载函数中进行查找(执行注册进来的方法)。

LoadClass方法:
执行findFile方法
1.如果ClassLoader下的classmap数组中有相应的类,直接返回;如果在missingFiles中有纪录这个类是加载不到的,直接返回false。
2.如果apcu前缀不为空且在php.ini配置中开启了apc功能,则使用apcu_fetch查询类是否存在
3.根据文件名,带上文件后缀 .php  在psr0和psr4中进行查找。
4.如果在第三步之中找到相应class,则在第二步的前提条件下,将类路径借助apcu_add存起来。
5.如果以上都找不到相应的类,则将类纪录在missFiles数组中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值