thinkphp命名空间用法实例详解


Posted in PHP onDecember 30, 2015

本文实例讲述了thinkphp命名空间用法。分享给大家供大家参考,具体如下:

新版本(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);

希望本文所述对大家基于thinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
第1次亲密接触PHP5(2)
Oct 09 PHP
在线增减.htpasswd内的用户
Oct 09 PHP
php mysql数据库操作类
Jun 04 PHP
表格展示无限级分类(PHP版)
Aug 21 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
CI框架开发新浪微博登录接口源码完整版
May 28 PHP
浅析ThinkPHP的模板输出功能
Jul 01 PHP
php随机获取金山词霸每日一句的方法
Jul 09 PHP
PHP编程基本语法快速入门手册
Jan 07 PHP
ThinkPHP路由机制简介
Mar 23 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
laravel 实现登陆后返回登陆前的页面方法
Oct 03 PHP
详解PHP中的null合并运算符
Dec 30 #PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 #PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 #PHP
分享PHP守护进程类
Dec 30 #PHP
如何写php守护进程(Daemon)
Dec 30 #PHP
PHP汉字转换拼音的函数代码
Dec 30 #PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 #PHP
You might like
php获取从html表单传递数组的方法
2015/03/20 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
Python selenium抓取微博内容的示例代码
2018/05/17 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
深入理解Python 多线程
2020/06/16 Python
python 模拟登陆github的示例
2020/12/04 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
学习心得体会
2014/01/01 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
股份合作协议书范本
2014/04/14 职场文书
优秀员工演讲稿
2014/05/19 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis