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个人网站架设连环讲(四)
Oct 09 PHP
PHP连接access数据库
Mar 27 PHP
整理的9个实用的PHP库简介和下载
Nov 09 PHP
mysql数据库差异比较的PHP代码
Feb 05 PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 PHP
什么情况下可以不写PHP的闭合标签“?>”
Aug 28 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
php支持中文字符串分割的函数
May 28 PHP
php array_key_exists() 与 isset() 的区别
Oct 24 PHP
PHP处理Ajax请求与Ajax跨域问题
Feb 13 PHP
PHP实现微信提现功能(微信商城)
Nov 21 PHP
PHP中->和=>的意思
Mar 31 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
一个SQL管理员的web接口
2006/10/09 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
javascript new 需不需要继续使用
2009/07/02 Javascript
jQuery $.each的用法说明
2010/03/22 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
python距离测量的方法
2018/03/06 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
详解Python中namedtuple的使用
2020/04/27 Python
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
机电一体化专业应届生求职信
2013/11/27 职场文书
房地产还款计划书
2014/01/10 职场文书
购房意向书
2014/08/30 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
离婚案件上诉状
2015/05/23 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
Redis实现订单过期删除的方法步骤
2022/06/05 Redis