PHP命名空间(Namespace)简明教程


Posted in PHP onJune 11, 2014

这一特性在 PHP5.0x 时候就提出过,后来被取消并安排在 PHP6 中实现。而此次又再次“提前”到了 PHP5.3 发布,可见开发人员对其的重视以及谨慎的态度。

官方发布时说明文档的内容可能已过期(documentation maybe out dated),所以在这里简单的说明命名空间的用法:首先是声明一个命名空间,加入了新的关键字 namespace ,其应在类文件的开头

<?php   
namespace Project::Module;    
class User {       
    const STATUS_OK = true;       
    function register($data) {   
        ...       
    }   
    ...   
}?>

然后在控制器中(可能是其他文件)就可以这样调用

$user = new Project::Module::User();   
$user->register($register_info);

的确与平常的并无两样,但是我们可以将两个相互独立的类联系起来。比如
Project::Module::User;   
Project::Module::Blog;

这样就能从语言本身更容易描述和理解变量、类之间的关系,从而避免了“传统”上的 Project_Module_Blog 这样冗长的命名方式。

上面的说明可能很难说明使用命名空间带来了什么好处,新增加的 use 和 as 关键字或许能更好的说明问题。use 和 as 语句可以引用和声明 命名空间的“别名”。比如,上述的控制器中实例化类的代码可以这样写

use Project::Module;   
$user = new Module::User();    
$user->register($register_info);
 
甚至
use Project::Module::User as ModuleUser;   
$user = new ModuleUser;   
$user->register($register_info);

类中的常量也可以通过命名空间访问,比如上述类中的 STATUS_OK 就可以通过命名空间
Project::Module::User::STATUS_OK

访问。进一步的,也可以用别名简化那么长的“变量名称”
use Project::Module::User::STATUS_OK as STATUS_OK;
echo STATUS_OK;

顺便提下“超空间(The Global Namespace)”的概念。所谓的“超空间”,就是没有指定命名空间的变量、类和函数。比如
function foo() {   
    ...   
}

这的函数,可以使用 foo() 执行的同时,也可以使用 ::foo(); 这样执行。

最后,配合使用 autoload 函数即可载入指定命名空间的类。简单的函数如下

function __autoload( $classname ) {       
    $classname = strtolower( $classname );       
    $classname = str_replace( '::', DIRECTORY_SEPARATOR, $classname );   
    require_once( dirname( __FILE__ ) . '/' . $classname . '.class.php' );   
}

这样,比如调用
__autoload('Project::Module::User'); 

就可以自动载入 Project_Module_User.class.php 文件(虽然这样看起来并不方便多少)。
PHP 相关文章推荐
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 PHP
php根据操作系统转换文件名大小写的方法
Feb 24 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
May 04 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
PHP积分兑换接口实例
Feb 09 PHP
php字符串函数学习之strstr()
Mar 27 PHP
简单谈谈PHP vs Node.js
Jul 17 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
老生常谈PHP面向对象之解释器模式
May 17 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
利用php的ob缓存机制实现页面静态化方法
Jul 09 PHP
详解PHP队列的实现
Mar 14 PHP
PHP APC配置文件2套和参数详解
Jun 11 #PHP
PHP捕获Fatal error错误的方法
Jun 11 #PHP
PHP独立Session数据库存储操作类分享
Jun 11 #PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 #PHP
php+ajax导入大数据时产生的问题处理
Jun 11 #PHP
CI框架中libraries,helpers,hooks文件夹详细说明
Jun 10 #PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 #PHP
You might like
长波有什么东西
2021/03/01 无线电
php array_merge下进行数组合并的代码
2008/07/22 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
深入浅析python继承问题
2016/05/29 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
2018/01/05 Python
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
便捷提取python导入包的属性方法
2018/10/15 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
用python3读取python2的pickle数据方式
2019/12/25 Python
Python Django搭建网站流程图解
2020/06/13 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
自荐信的两点禁忌
2013/10/30 职场文书
情人节活动总结范文
2015/02/05 职场文书
护士自荐信怎么写
2015/03/06 职场文书
个人承诺书格式范文
2015/04/29 职场文书
公司周年庆寄语
2019/06/21 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL