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 相关文章推荐
WINXP下apache+php4+mysql
Nov 25 PHP
菜鸟学PHP之Smarty入门
Jan 04 PHP
php桌面中心(四) 数据显示
Mar 11 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
php文件下载处理方法分析
Apr 22 PHP
php中关于socket的系列函数总结
May 18 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
Sep 22 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
php制作的简单验证码识别代码
Jan 26 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
PHP基于socket实现客户端和服务端通讯功能
Jul 13 PHP
数据结构之利用PHP实现二分搜索树
Oct 25 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
php实现的验证码文件类实例
2015/06/18 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
js转义字符介绍
2013/11/05 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
js中匿名函数的创建与调用方法分析
2014/12/19 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
[03:08]Ti4观战指南上
2014/07/07 DOTA
对于Python深浅拷贝的理解
2019/07/29 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
货物运输服务质量承诺书
2014/05/29 职场文书
南京青奥会口号
2014/06/12 职场文书
社会实践活动总结范文
2014/07/03 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
党员教师批评与自我批评发言稿
2014/10/15 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫