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

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

复制代码 代码如下:

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命名空间(Namespace)简明教程相关推荐

  1. 【C++ 语言】命名空间 ( namespace | 命名空间定义 | 命名空间嵌套 | 域作用符 | 与 include 对比 )

    文章目录 命名空间简介 自定义命名空间 自定义嵌套命名空间 域作用符 命名空间 与 include 区别 命名空间定义与使用完整代码 命名空间简介 命名空间 ( namespace ) : 1.命名空 ...

  2. python的命名空间_python命名空间(namespace)

    #命名空间(namespace)#命名空间指的是变量存储的位置,每一个变量都需要存储到指定的命名空间当中#每一个作用域都会有一个它对应的命名空间#全局命名空间,用来保存全局变量.函数命名空间用来保存函 ...

  3. 【命名空间】using namespace std是什么意思?

    文章目录 一. 前言 二.作用域分解运算符 三.命名空间使用介绍 四.using namespace std 一. 前言  C++中的using namespace std是什么意思呢?为了理解其中的 ...

  4. C#命名空间详解namespace

    C#命名空间详解namespace 命名空间是一个域,这在个域中所有的类型名字必须是唯一的,不同的类型分组归入到层次化的命名空间, 命名空间的好处是:1.避免名字冲突,2.便于查找类型名字. 如:Sy ...

  5. vbs简明教程(转载)

    Vbs脚本编程简明教程之一       -为什么要使用Vbs?2007年03月26日 星期一 下午 04:46 在Windows中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周 ...

  6. oracle解析xml字符串命名空间,XML命名空间

    命名空间是一组唯一的名称.命名空间是一种机制通过该元素和属性的名字可以被分配到组.该命名空间是确定的URI(统一资源标识符). 命名空间声明 命名空间声明是使用保留的属性.这样的属性名称必须是XMLN ...

  7. C++操作SQLite简明教程

    这篇文章主要介绍了C++操作SQLite简明教程,包含创建表.插入数据.查询数据等常用操作,需要的朋友可以参考下 SQLite是一款轻型的本地文件数据库,是遵守ACID的关联式数据库管理系统.它的设计 ...

  8. duilib入门简明教程 -- 部分bug (11) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3344886.html 一.WindowImplBase的bug 在第8个教程[2013 duilib入门简明教程 -- 完 ...

  9. Vbs脚本编程简明教程之三

    Vbs 脚本编程简明教程之三 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  10. C#之基础4---①什么是命名空间,为什么要使用命名空间,命名空间与类的区别

    1.什么是命名空间? 命名空间设计目的是提供一种让一组名称与其他名称分隔开的方式.在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突. 我们举一个计算机系统中的例子,一个文件夹 ...

最新文章

  1. 《Linux内核设计与实现》读书笔记 第三章 进程管理
  2. No mapping found for HTTP request with URI
  3. HTTP协议中的keep-alive
  4. stand up meeting 12/25/2015 weekend 12/26/2015~12/27/2015
  5. 欧洲杯直播助PPTV日均流量登顶视频行业首位
  6. c语言控制倒车雷达系统,倒车雷达控制系统设计
  7. 性能优化—— 代码优化
  8. centos6.5最小化安装
  9. 如何在“家庭”应用中创建场景?
  10. Android高手进阶:Adapter深入理解与优化
  11. 华为手机html查看器,华为手机文件查看管理器
  12. Js-Alert弹出框几种样式(一级)
  13. 网络复现笔记-AdaptSegNet
  14. 【灵修】应对“三季人”,多活十余年(2012-1-14)
  15. Netbox 开源 IPAM 管理工具搭建详细流程
  16. Mysql客户端navicat的使用并连接远程数据库【重点】
  17. 在线短视频去水印工具网站
  18. java免费获取物流信息
  19. SQL自动检查神器项目,吊炸天的功能
  20. 起重吊装资质证书如何办理通过?经验之谈

热门文章

  1. .Net Core微服务系列--理论篇
  2. 微软官宣:史上最贵开发工具 75亿美金收购GitHub
  3. Blazor正式成为Microsoft官方.NET 和WebAssembly项目
  4. vue 开发2017年变化回顾及2018年展望
  5. 采用Opserver来监控你的ASP.NET项目系列(三、监控你的服务器状态)
  6. 基于ZKWeb + Angular 4.0的开源管理后台Demo
  7. Android之在ubuntu上过滤多条关键字日志
  8. 阿里云500服务器内部错误,腾讯云服务器网站不能打开 提示内部错误http 500
  9. oracle内外链接混合用,混合在一起通过连接,内部连接和总结与Oracle
  10. mysql 配置多个数据库连接_总结MySQL修改最大连接数的两个方式