tp的命名空间加载

1.根命名空间加载

在tp中有三个预定义的根命名空间

app应用类库 application

think系统核心类库thinkphp/library/think

traits系统Trait类库thinkphp/library/traits

//use的使用方法:
use think\Request
use think\Session

如果需要增加新的根命名空间,有两种方式:注册新的根命名空间或者放入EXTEND_PATH目录(自动注册)

2.自动注册

需要把自己的类库包目录放入EXTEND_PATH目录(默认为extend,可配置),

就可以自动注册对应的命名空间。

通俗来讲是在extend目录下新建一个文件就这个文件夹名字当作一个根命名空间

栗子:

//类文件位于extend/my/Test.php

//命名空间是namespace my;
//直接new
$test = new \my\Test();

应用入口重新定义EXTEND_PATH常量

可以改变\my\Test类文件的位置

define('EXTEND_PATH','../vendor/');

那么\my\Test类文件的位置就变成了/vendor/my/File.php

注意不能定义含有预定义的三个根命名空间名字

3.手动注册

手动定义一个根命名空间比自动定义还要方便,更自由。

//单独注册
\think\Loader::addNamespace('命名空间','路径');
\think\Loader::addNamespace('my\test','../application/extend/my/test');
//批量注册
\think\Loader::addNamespace([
    '命名空间1','路径1',
    '命名空间2','路径2',
    ......
    ]);

4.类库映射

定义一个完整的命名空间的类名

//单独注册
loader::addClassMap('think\log',LIB_PATH,'think\log.php');
//批量注册
$map = [
    'think\Log'     =>  LIB_PATH.'think\Log.php',
    'org\util\array'=>  LIB_PATH.'org\util\Array.php'
];
Loader::addClassMap($map);

5.手动加载

手动加载自由度最大,

①可以有命名空间,遵循tp规范。

②可以有命名空间,不遵循tp规范。

③没有命名空间。

使用think\Loader类的import方法手动加载类库文件

loader('类库命名空间字符串','起始路径','文件拓展名')

栗子:

//加载当前模块应用类库
Loader::import('@.test.wechat#mail#class');//目录中斜杠用点替换,类中的点用井号代替
//加载其它模块的类库
\think\Loader::import('index.zx.zx',APP_PATH,'.class.php');
\think\Loader::import('index.zx.zx','../application','.class.php');

6.Composer下载

依赖类包名字和相关信息定义成json文件

加载类文件:配置和所需的类包进行关联,降低程序代码耦合度

代码的仓库:所有类库都是发布在他的平台

https://packagist.org/

栗子:

//下载topthink作者的处理图片类
 $img=\think\Image::open('static/img/in.jpg')->size();
 //查看本地图片的尺寸
ThinkPHP

我来吐槽

*

*