遵循我们上面的命名空间定义规范的话,基本上可以完成类库的自动加载了,但是如果定义了较多的命名空间的话,效率会有所下降,所以,我们可以给常用的类库定义类库映射。命名类库映射相当于给类文件定义了一个别名,效率会比命名空间定位更高效,例如:
Loader::addClassMap('thinkLog',LIB_PATH.'thinkLog.php');
Loader::addClassMap('orgutilArray',LIB_PATH.'orgutilArray.php');
也可以利用addClassMap
方法批量导入类库映射定义,例如:
$map = [
'thinkLog' => LIB_PATH.'thinkLog.php',
'orgutilarray'=> LIB_PATH.'orgutilArray.php'
];
Loader::addClassMap($map);
虽然通过类库映射的方式注册的类可以不强制要求对应命名空间目录,但是仍然建议遵循PSR-4规范定义类库和目录。
类库导入
如果你不需要系统的自动加载功能,又或者没有使用命名空间的话,那么也可以使用thinkLoader
类的import
方法手动加载类库文件,例如:
Loader::import('org.util.array');
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 | 应用类库 |
@ | 表示当前模块类库包 |
如果完全遵从系统的命名空间定义的话,一般来说无需手动加载类库文件,直接实例化即可。
ThinkPHP5.0
不推荐使用import
方法。