当前位置: 首页 > 编程笔记 >

thinkPHP5.0框架自动加载机制分析

周祺
2023-03-14
本文向大家介绍thinkPHP5.0框架自动加载机制分析,包括了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方法手动加载类库html" target="_blank">文件,例如:

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相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》、《smarty模板入门基础教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

 类似资料:
  • 本文向大家介绍PHP MVC框架中类的自动加载机制实例分析,包括了PHP MVC框架中类的自动加载机制实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP MVC框架中类的自动加载机制。分享给大家供大家参考,具体如下: 原文 实现类的自动加载主要使用到了set_include_path和spl_autoload_register函数。 set_include_path用于提前设置

  • 问题内容: 我已经在互联网上搜寻了好几个小时了,有很多“有用的”建议……除了问题之外什么也没有。 这就是我,几乎完全是: 在Docker容器中播放框架自动加载 我正在运行Play的最新版本(我认为,不知道如何检查,但下载了<一周前)!具有Java 8的ubuntu docker容器内部的框架,使用以下dockerfile构建: 互联网上的多个来源显示出相同或相似的问题,或多或少得出了相同的结论。我

  • 1.4* 自动加载脚本机制 前文已提及,vim 脚本主要用 :source 命令加载,然而很多情况下又不需要手动执行 该命令。只要将脚本放在特定的目录下,vim 就有个机制自动搜寻并加载的机制。 Vim 插件搜索目录 首先要知道有 &runtimepath (常简写为 &rtp)这个选项。它与系统的环境变量 $PATH 有点类似,就是一组有序的目录名称,用于 Vim 在许多不同情况下搜寻 *.vi

  • 本文向大家介绍thinkPHP5.0框架开发规范简介,包括了thinkPHP5.0框架开发规范简介的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkPHP5.0框架开发规范。分享给大家供大家参考,具体如下: 命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录不强制规范,驼峰及小写+下划线模式均支持; 类库、函数文件统一以

  • 本文向大家介绍thinkPHP5.0框架命名空间详解,包括了thinkPHP5.0框架命名空间详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkPHP5.0框架命名空间。分享给大家供大家参考,具体如下: 命名空间 ThinkPHP采用命名空间方式定义和自动加载类库文件,有效的解决了多模块和Composer类库之间的命名空间冲突问题,并且实现了更加高效的类库自动加载机制。 如果不

  • 在我的Windows10机器上启动播放项目时遇到问题(在Win7上运行良好) 当我执行“激活器运行”时,我会得到以下结果: 我试过很多事情都没有成功。我试着从: 至 addSbtPlugin(“com.typesafe.play”%“sbt-plugin”%“2.3.2”) 我得到另一个错误: 再一次,我在Win10(64bit)上 这里真的需要一些帮助,被困了几天。