composer 自动载入的简单理解
2017-12-17 22:58
411 查看
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数组中。
结合命名空间自动加载(前提是要加载的类指定了命名空间,即有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数组中。
相关文章推荐
- 深入理解PHP类的自动载入机制
- JAVA简单理解自动装箱与自动拆箱
- composer 自动载入的四种方式
- 深入理解composer的autoload自动加载原理
- 深入理解PHP类的自动载入机制
- 深入理解composer的autoload自动加载原理
- composer 自动载入的四种方式
- php 命名空间 和 自动加载机制 的简单理解
- ios学习之autolayout自动布局的简单理解 即UIKIt dymanic的使用
- java 修饰词 private final 简单的理解
- 敏捷开发\瀑布模型 简单理解
- word2vec简单理解
- javascript焦点图左右按钮简单自动轮播
- 简单十步让你全面理解SQL
- 通过简单示例来理解什么是机器学习
- 贝叶斯简单理解
- OAuth2.0的简单理解与使用
- 数据结构的简单理解(2)
- ViewPager无限轮播与自动轮播简单demo