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 相关文章推荐
也谈截取首页新闻 - 范例
Oct 09 PHP
PHP入门速成教程
Mar 19 PHP
php中计算时间差的几种方法
Dec 31 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
PHP中获取时间的下一周下个月的方法
Mar 18 PHP
详解PHP导入导出CSV文件
Nov 03 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
PHP基于MySQL数据库实现对象持久层的方法
Jun 17 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
windows平台中配置nginx+php环境
Dec 06 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
Sep 30 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
Laravel实现ApiToken认证请求
2019/10/14 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
dojo 之基础篇
2007/03/24 Javascript
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
juqery 学习之四 筛选过滤
2010/11/30 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
js数组操作学习总结
2013/11/04 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
Python中的默认参数详解
2015/06/24 Python
遗传算法之Python实现代码
2017/10/10 Python
微信跳一跳python代码实现
2018/01/05 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
高一物理教学反思
2014/01/24 职场文书
文明演讲稿范文
2014/05/12 职场文书
公司应聘求职信
2014/06/21 职场文书
百日安全生产活动总结
2014/07/05 职场文书
网络技术专业求职信
2014/07/13 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
售后服务承诺函格式
2015/01/21 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
正规借条模板
2015/05/26 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
同学联谊会邀请函
2019/06/24 职场文书
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers