thinkPHP5.0框架自动加载机制分析


Posted in PHP onMarch 18, 2017

本文实例讲述了thinkPHP5.0框架自动加载机制。分享给大家供大家参考,具体如下:

概述

ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类库的自动加载。

自动加载的实现由think\Loader类库完成,自动加载规范符合PHP的PSR-4。

自动加载

由于新版ThinkPHP完全采用了命名空间的特性,因此只需要给类库正确定义所在的命名空间,而命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载。

类库的自动加载检测顺序如下:

1、类库映射检测;
2、PSR-4自动加载检测;
3、PSR-0自动加载检测;

系统会按顺序检测,一旦检测生效的话,就会自动载入对应的类库文件。

类库映射

遵循我们上面的命名空间定义规范的话,基本上可以完成类库的自动加载了,但是如果定义了较多的命名空间的话,效率会有所下降,所以,我们可以给常用的类库定义类库映射。命名类库映射相当于给类文件定义了一个别名,效率会比命名空间定位更高效,例如:

Loader::addClassMap('think\Log',LIB_PATH.'think\Log.php');
Loader::addClassMap('org\util\Array',LIB_PATH.'org\util\Array.php');

也可以利用addClassMap方法批量导入类库映射定义,例如:

$map = [
  'think\Log'   => LIB_PATH.'think\Log.php',
  'org\util\array'=> LIB_PATH.'org\util\Array.php'
];
Loader::addClassMap($map);

虽然通过类库映射的方式注册的类可以不强制要求对应命名空间目录,但是仍然建议遵循PSR-4规范定义类库和目录。

类库导入

如果你不需要系统的自动加载功能,又或者没有使用命名空间的话,那么也可以使用think\Loader类的import方法手动加载类库文件,例如:

Loader::import('org.util.array');
Loader::import('@.util.upload');

示例

// 引入 extends/qrcode.php
Loader::import('qrcode', EXTEND_PATH);
// 助手函数
import('qrcode', EXTEND_PATH);
// 引入 extends/wechat-sdk/wechat.class.php
Loader::import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');
// 助手函数
import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');

类库导入也采用类似命名空间的概念(但不需要实际的命名空间支持),支持的“根命名空间”包括:

目录 说明
behavior 系统行为类库
think 核心基类库
traits 系统Traits类库
app 应用类库
@ 表示当前模块类库包

如果完全遵从系统的命名空间定义的话,一般来说无需手动加载类库文件,直接实例化即可。

Composer自动加载

5.0版本支持Composer安装的类库的自动加载,你可以直接按照Composer依赖库中的命名空间直接调用。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP通过COM使用ADODB的简单例子
Dec 31 PHP
在PHP中检查PHP文件是否有语法错误的方法
Dec 23 PHP
php读取本地文件常用函数(fopen与file_get_contents)
Sep 09 PHP
PHP实现的下载远程图片自定义函数分享
Jan 28 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
php文件缓存类用法实例分析
Apr 22 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
Jul 18 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
浅析PHP数据导出知识点
Feb 17 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 15 PHP
thinkPHP5.0框架引入Traits功能实例分析
Mar 18 #PHP
2017年最新PHP经典面试题目汇总(上篇)
Mar 17 #PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 #PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
Mar 17 #PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 #PHP
PHP中类的自动加载的方法
Mar 17 #PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 #PHP
You might like
Twig模板引擎用法入门教程
2016/01/20 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
Python魔术方法详解
2015/02/14 Python
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
python基础教程之五种数据类型详解
2017/01/12 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
Python处理PDF与CDF实例
2020/02/26 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
毕业生医学检验求职信
2013/10/16 职场文书
房屋维修协议书范本
2014/09/25 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
处级干部考察材料
2014/12/24 职场文书
专项资金申请报告
2015/05/15 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android