关于THINKPHP5种如何引入第三方的类文件

tp5的模型虽然是固定的,可是不少人会建不一样的目录结构,有的为了访问方式,有的是为了restful风格,因此引用三方包的时候 ,路径方式也不一样,下面列出几种常常用到的:javascript

自动加载

 

ThinkPHP5.0真正实现了按需加载,全部类库采用自动加载机制,而且支持类库映射和composer类库的自动加载。php

自动加载的实现由think\Loader类库完成,自动加载规范符合PHP的PSR-4css

自动加载

因为新版ThinkPHP彻底采用了命名空间的特性,所以只须要给类库正肯定义所在的命名空间,而命名空间的路径与类库文件的目录一致,那么就能够实现类的自动加载。java

类库的自动加载检测顺序以下:restful

一、类库映射检测;
二、PSR-4自动加载检测;
三、PSR-0自动加载检测;app

系统会按顺序检测,一旦检测生效的话,就会自动载入对应的类库文件。composer

类库映射

遵循咱们上面的命名空间定义规范的话,基本上能够完成类库的自动加载了,可是若是定义了较多的命名空间的话,效率会有所降低,因此,咱们能够给经常使用的类库定义类库映射。命名类库映射至关于给类文件定义了一个别名,效率会比命名空间定位更高效,例如:函数

Loader::addClassMap('think\Log',LIB_PATH.'think\Log.php'); Loader::addClassMap('org\util\Array',LIB_PATH.'org\util\Array.php');

也能够利用addClassMap方法批量导入类库映射定义,例如:post

$map = [ 'think\Log' => LIB_PATH.'think\Log.php', 'org\util\array'=> LIB_PATH.'org\util\Array.php' ]; Loader::addClassMap($map);

虽然经过类库映射的方式注册的类能够不强制要求对应命名空间目录,可是仍然建议遵循PSR-4规范定义类库和目录。spa

类库导入

若是你不须要系统的自动加载功能,又或者没有使用命名空间的话,那么也可使用think\Loader类的import方法手动加载类库文件,例如:

Loader::import('org.util.array'); //import 进入 输入 导入 汇入 Loader::import('@.util.upload');

示例

// 引入 extend/qrcode.php Loader::import('qrcode', EXTEND_PATH); // 助手函数 import('qrcode', EXTEND_PATH); // 引入 extend/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 应用类库
@ 表示当前模块类库包

traits  特质 特征 性态 特性

若是彻底听从系统的命名空间定义的话,通常来讲无需手动加载类库文件,直接实例化便可。

ThinkPHP5.0不推荐使用import方法。

Composer自动加载

5.0版本支持Composer安装的类库的自动加载,你能够直接按照Composer依赖库中的命名空间直接调用。

相关文章
相关标签/搜索