博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
thinkphp学习笔记8—命名空间
阅读量:5905 次
发布时间:2019-06-19

本文共 1214 字,大约阅读时间需要 4 分钟。

新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制。

需要给类库定义所在的命名空间,命名空间的路径和类库文件的目录一致,就可以实现类的自动加载,例如Org\Util\File类的定义为

namespace Org\Util;class File {}

其所在的路径是ThinkPHP/Library/Org/Util/File.class.php,我们实例化该类写法如下:

$class = new \Org\Util\File();

系统会自动加载上述文件,这样就不需要在实例化命名空间定义的类之前导入类库文件了。

 

根命名空间是一个很关键的概念,以上面的Org\Util\File类为例,Org就是一个根命名空间,其对应的初始命名空间目录就是系统的类库目录ThinkPHP/Liberary,该目录下一级子目录会自动识别为根命名空间,这些命名空间无需注册就可使用。

我们在Library目录下面新增一个My根命名空间目录,然后定义一个Test类如下:

namespace My;class Test {        public function sayHello()    {                echo 'hello';        }}

将test类保存在ThinkPHP/Liberary/My/Test.class.php,我们就可以直接实例化和调用

$Test = new \My\Test();$Test->sayHello();

模块中的类库命名空间是以模块名命名,例如:

namespace Home\Model;class UserModel extends \Think\Model {}

其类文件位于Application/Home/Model/UserModel.class.php

namespace Admin\Event;class UserEvent {}

其类文件位于Application/Admin/Event/UserEvent.class.php

3.2.1版本以上允许设置对应用类库不使用命名空间,在配置文件中设置如下:

'APP_USE_NAMESPACE'    =>    false,

这样应用类库中不再需要使用命名空间的定义,但是继承和调用核心类库的时候还是需要使用命名空间,例如,下面的应用类库中将不再写namespace Admin\Model;

class UserModel extends \Think\Model {}

特别注意:如果你需要在3.2版本中实例化PHP内置的类库或者第三方的没有使用命名空间定义的类,需要采用下面的方式:

$class =    new \stdClass();$sxml  =    new \SimpleXmlElement($xmlstr);

 

转载地址:http://eedpx.baihongyu.com/

你可能感兴趣的文章
ES6数组去重的最佳实践:Set结合Array.from() | 拓展运算符结合 Set
查看>>
深入屏幕像素概念
查看>>
awk命令的几个选项注释
查看>>
Windows更改临时文件夹
查看>>
django base (1)
查看>>
iRedMail调整附件大小 & Postfix的bcc(自动转发/邮件备份/监控/归档) 在同一个服务器是有压力...
查看>>
唯识相链由来
查看>>
linux系统的负载与CPU、内存、硬盘、用户数监控shell脚本
查看>>
Percona Toolkit 安装
查看>>
VOD, TVOD, SVOD FVOD的区别(转)
查看>>
元学习法 - XDITE -Xdite 郑伊廷
查看>>
Linux安装指导手册—Unix/Linux技术文档(一)
查看>>
Firewall之iptables篇
查看>>
sed 语法
查看>>
bash编程之:case语句、read与用户交互
查看>>
RHEL6入门系列之二十二,quota磁盘配额管理
查看>>
费用登记系统(小结)
查看>>
Windows Group Policy Startup script is not executed at startup
查看>>
智能指针
查看>>
AIX修改用户密码登录不成功案例分享
查看>>