thinkphp 框架自动加载原理_thinkPHP5.0框架自动加载机制分析
本文实例讲述了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程序设计有所帮助。
您可能感兴趣的文章:
thinkphp 框架自动加载原理_thinkPHP5.0框架自动加载机制分析相关推荐
- thinkphp 框架自动加载原理_ThinkPHP5分析Part 1 基本框架流程
ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能 ...
- 【Android 安全】DEX 加密 ( 不同 Android 版本的 DEX 加载 | Android 8.0 版本 DEX 加载分析 | Android 5.0 版本 DEX 加载分析 )
文章目录 一.不同版本的 DEX 加载 1.Android 8.0 版本 DEX 加载分析 2.Android 6.0 版本 DEX 加载分析 3.Android 5.0 版本 DEX 加载分析 一. ...
- webpack实现懒加载原理以及如何使用懒加载优化项目
参考: 清晰易懂,可以先看这个:webpack的异步加载原理及分包策略 webpack中的懒加载代码原理解析:https://segmentfault.com/a/1190000020233387 自 ...
- android下载完成不能自动安装失败,android 8.0以上自动安装apk失败的解决问题
随着android 系统的不断更新和发展,针对应用的权限管理也是越来越严格.这可是坑坏了我们这些搬砖的程序员,因为在一些上架平台,都一一宣布,以后的android应用 targetSdkVersion ...
- php自动加载原理,php中的自动加载类机制原理
PHP最早讀取套件的方法 初學PHP時,最早會面對的問題之一就是require與include差別何在? require_once與include_once又是什麼? 弄懂這些問題之後,如果不使用fr ...
- thinkphp连mysql增删改查_ThinkPHP5.1框架数据库链接和增删改查操作示例
本文实例讲述了ThinkPHP5.1框架数据库链接和增删改查操作.分享给大家供大家参考,具体如 本文实例讲述了ThinkPHP5.1框架数据库链接和增删改查操作.分享给大家供大家参考,具体如下: 一. ...
- Spring 4.x框架中的新特性---Spring4.0框架的新功能和改善
2004年Spring框架首次发布,然后陆续发布了一些重要的版本:Spring2.0提供XML命名空间和AspectJ的支持:Spring2.5包含了注释驱动配置:Spring3.0在框架基础代码中引 ...
- mybatis 的懒加载原理
断断续续的阅读 mybatis 的源码有好几个月了,想把自己了解到的一些东西与大家分享.今天给大家分享一下 mybatis 的懒加载原理. mybatis 的懒加载过程挺复杂的,涉及到的东西有很多,包 ...
- 【Docker篇】Docker镜像加载原理,UnionFS(联合文件系统),镜像Commit
文章目录 Docker镜像 1. 镜像是什么 2.Docker镜像加载原理 2.1 UnionFS(联合文件系统) 2.2 Docker镜像加载原理 3. 分层理解 3.1 引申理解 4. 镜像Com ...
最新文章
- 你知道这些 985、211 院校的隶属吗?
- UEFI下面安装win7+Xubuntu18.10双系统
- SAP Spartacus B2B List里的listData$设计原理
- 【C语言简单说】十一:switch 补
- jquery jgrid filterToolBar beforeSearch 修改postData
- 设计模式是什么鬼(单例)
- python自定义函数的关键字_Python3.x中自定义比较函数
- 使用hibernate可以优化的地方
- 深入分析Android (build/core/*.mk脚本)
- T-SQL查询进阶—理解SQL Server中的锁
- 如何使用Bartender标签打印软件批量打印构件二维码标签?
- 性别年龄论文阅读(3)——VGGFace2
- MVC 生成PDf表格并插入图片
- 不仅国产手机被撕下遮羞布,其实苹果和三星也已没了遮羞布
- 浏览器主页被篡改修复
- Excel图表坐标轴出现系列1、系列2的解决方案
- 没有美术基础如何学好平面设计?
- Lync/Skype脱机地址簿不更新
- Kali与编程:Winserver 2019 搭建web服务器7-05
- OFD格式文件怎么转PDF格式?分享一个轻松转换小妙招