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-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
有关JSON以及JSON在PHP中的应用
Apr 09 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
Jun 05 PHP
Yii结合CKEditor实现图片上传功能
Jun 13 PHP
php使用Cookie控制访问授权的方法
Jan 21 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
php单链表实现代码分享
Jul 04 PHP
php 实现Hash表功能实例详解
Nov 29 PHP
php微信公众号开发之简答题
Oct 20 PHP
thinkPHP框架中layer.js的封装与使用方法示例
Jan 18 PHP
PHP 并发场景的几种解决方案
Jun 14 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下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
mysql总结之explain
2012/02/27 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
在Django框架中运行Python应用全攻略
2015/07/17 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
浅析python 字典嵌套
2020/09/29 Python
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
大学生期末自我鉴定
2014/02/01 职场文书
计算机学生的自我评价分享
2014/02/18 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
2015年环卫工作总结
2015/04/28 职场文书
导游词之山西关帝庙
2019/11/01 职场文书