PHP5.3 新特性之"命名空间"介绍
这一特性在 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 文件(虽然这样看起来并不方便多少)。
给文章打个分先...
发表我的见解...
看看大家怎么说...
创意产品 发表于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




