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 相关文章推荐
一个程序下载的管理程序(四)
Oct 09 PHP
ThinkPHP调用百度翻译类实现在线翻译
Jun 26 PHP
php中http与https跨域共享session的解决方法
Dec 20 PHP
浅谈json_encode用法
Mar 05 PHP
php获取本周开始日期和结束日期的方法
Mar 09 PHP
8个PHP数组面试题
Jun 23 PHP
PHP远程调试之XDEBUG
Dec 29 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
Oct 25 PHP
php弹出提示框的是实例写法
Sep 26 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/01 无线电
php实现的简单检验登陆类
2015/06/18 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
node.js中的console用法总结
2014/12/15 Javascript
Javascript中arguments和arguments.callee的区别浅析
2015/04/24 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
python梯度下降算法的实现
2020/02/24 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
百度JavaScript笔试题
2015/01/15 面试题
文言文形式的学生求职信
2013/12/03 职场文书
元旦晚会主持词
2014/03/24 职场文书
模具专业自荐信
2014/05/29 职场文书
市级三好学生评语
2014/12/29 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
培训简讯范文
2015/07/20 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS