PHP5.3 新特性之"命名空间"介绍

Gracecode.com 2008年08月06日 21:30 查看2566次 作者: Gracecode  【
文章分类:PHP5研究[新]
PHP 5.3 的一个新的重要特性就是 命名空间(namespace)。

这一特性在 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 文件(虽然这样看起来并不方便多少)。

责任编辑:esayr

给文章打个分先...

平均分:1.5(84 次)

-5 -4 -3 -2 -1 0 1 2 3 4 5
21

顶一下

发表我的见解...

  • 您的大名: 留空为匿名
  • 您的主页:
  • 您的邮箱:

看看大家怎么说...

  • 创意产品 发表于09年04月20日 09:08

    学习了

  • phpfans2009 发表于08年08月25日 09:59

    学习PHP容易有的误区 PHP是一种运行于服务器端并完全跨平台的嵌入式脚本编程语言,是目前开发各类Web应用的主流语言之一。PHP因其功能强大、易学易用、可扩展性强、运行速度快和良好的开放性,而成为网站开发者的首选工具,其较高的开发效率,也给开发人员在编写Web应用程序时带来极大的便利。 如今有越来越对的开发人员开始使用PHP进行Web应用的开发,其中包括大量的初学者和各类对PHP技术感兴趣的读者。学习的时候,需要注意以下问题: 不要死记语法:很多初学者试图把各种语法背下来,其实这是极其错误的,程序开发的语法、规范特别多,不可能记得下来,你只要知道有这么一个功能就可以了,需要的时候翻阅书籍,或者查找帮助文件,这样省时省力。 多动手,多练习:只知道死啃书本的人,是不会成为开发高手的,只有多上机编写程序,才能在实践中提高对编程的认识。 遇到问题,首先尝试自己解决:自己先用一天的时间,尽力解决,实在不行再去找人帮助,千万不要遇到问题立刻找人帮忙,这样永远也不会提高。 多用Google、Baidu:网络是一个大知识库,是最好的老师,你遇到的问题,别人也遇到过,多去搜索以下吧。 多阅读别人的源代码:要看懂别人的设计思想,不断的融为己用。 学习的时候,还需要一本好的辅导书。这里推荐《零基础学PHP》(http://www.china-pub.com/40090)。

  • 某游客 发表于08年08月08日 15:55

    路过,来学习下

  • 某游客 发表于08年08月08日 15:55

    路过,来学习下

  • adex 发表于08年08月08日 13:07

    __autoload 不用显式调用,当定义后PHP会自动调用。 不过一般为防止命名冲突,较多时候使用 spl_autoload_register