找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1120|回复: 0
打印 上一主题 下一主题

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

[复制链接]

2588

主题

2588

帖子

7694

积分

论坛元老

Rank: 8Rank: 8

积分
7694
跳转到指定楼层
楼主
发表于 2018-2-14 05:27:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》、《smarty模板入门基础教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
            
            
您可能感兴趣的文章:
  • thinkphp中常用的系统常量和系统变量
  • ThinkPHP中的系统常量和预定义常量集合
  • ThinkPHP模板替换与系统常量及应用实例教程
  • ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
  • ThinkPHP中URL路径访问与模块控制器之间的关系
  • ThinkPHP中公共函数路径和配置项路径的映射分析
  • thinkphp常见路径用法分析
  • thinkphp表单上传文件并将文件路径保存到数据库中
  • ThinkPHP+jquery实现“加载更多”功能代码
  • thinkPHP5.0框架配置格式、加载解析与读取方法
  • thinkphp5 加载静态资源路径与常量的方法
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端