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 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
php 带逗号千位符数字的处理方法
Jan 10 PHP
php 伪静态之IIS篇
Jun 02 PHP
PHP的全局错误处理详解
Apr 25 PHP
php arsort 数组降序排序详细介绍
Nov 17 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 PHP
PHP常用正则表达式精选(推荐)
May 28 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
Syphon 使用方法
2021/03/03 冲泡冲煮
php header()函数使用说明
2008/07/10 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
Python中反射和描述器总结
2018/09/23 Python
一百多行python代码实现抢票助手
2018/09/25 Python
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
田径运动会通讯稿
2014/09/13 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
大学生读书笔记大全
2015/07/01 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
MySQL分库分表详情
2021/09/25 MySQL
详解如何使用Nginx解决跨域问题
2022/05/06 Servers