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原生模板引擎 最简单的模板引擎
Apr 25 PHP
php实现快速排序法函数代码
Aug 27 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
PHP zip扩展Linux下安装过程分享
May 05 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
Yii框架弹出框功能示例
Jan 07 PHP
PHP jQuery+Ajax结合写批量删除功能
May 19 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
Aug 04 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 27 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如何将日志写进syslog
2013/06/28 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
最佳JS代码编写的14条技巧
2011/01/09 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
python实现电子产品商店
2019/02/26 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
道路建设实施方案
2014/03/18 职场文书
《春晓》教学反思
2014/04/20 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
模范班主任事迹材料
2014/12/17 职场文书
护士自荐信范文
2015/03/25 职场文书
教师节大会主持词
2015/07/06 职场文书
结婚主持人致辞
2015/07/28 职场文书