PHP5.3 新特性之”命名空间”

2009/11/27  |  3:56 下午分类:W(L)AMP  |  标签:  |  899 views

PHP 5.3 的一个新的重要特性就是 命名空间(namespace)。

这一特性在 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;

最后,配合使用 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 文件(虽然这样看起来并不方便多少)。

喜欢本文,那就收藏到: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

18条评论 关于 “PHP5.3 新特性之”命名空间””

  1. 余潇冉 发表于: 十一月 27th, 2009 5:55 下午

    我轻飘飘的路过。。ohoho。。。

    [回复]

  2. genital warts 发表于: 十一月 27th, 2009 11:13 下午

    博主博客弄的不错,我要好好学习下:)

    [回复]

    kazaff 回复:

    谢谢捧场哟~

    [回复]

  3. QQ农场外挂 发表于: 十一月 29th, 2009 11:42 下午

    已经达到忘我的境界了,呵呵

    [回复]

  4. lufei 发表于: 十一月 30th, 2009 10:39 上午

    轻轻的我来了,
    轻轻挥挥衣袖,
    不带走一片云彩!

    [回复]

  5. sitepig 发表于: 十一月 30th, 2009 5:40 下午

    你好,你的站是PR3-PR5的站点吗?打算在你站点放置文字链接,每月给你钱。联系Q2①523

    [回复]

    kazaff 回复:

    sorry,PR2,等3了联系你

    [回复]

  6. www.shipinlt.cn 发表于: 十一月 30th, 2009 6:54 下午

    溜达溜达….

    [回复]

  7. 非主流美女图片 发表于: 十二月 1st, 2009 9:55 下午

    来留个链接 不介意吧

    [回复]

    kazaff 回复:

    不介意!只要合法!呵呵

    [回复]

  8. suby 发表于: 十二月 3rd, 2009 1:05 下午

    一届怎么你的空间比我的空间还差啊! 你用的什么空间的比我还要慢…. 我等的都快要尿裤子了

    [回复]

    kazaff 回复:

    呵呵,很简单,我一句话就解释你了:因为俺比你穷!

    [回复]

    suby 回复:

    现在我大冷的冬天身穿短袖! 我们谁穷啊??

    [回复]

    kazaff 回复:

    我晕,抬杠是吧?你那是因为有空调!!
    我明天就去裸奔!

    [回复]

    suby 回复:

    今天你裸奔了吗??

    照片有不! ^_^!!!

    [回复]

    kazaff 回复:

    我光顾着奔了,哪有时间照相啊!

    [回复]

    suby 回复:

    你接着吹!~~~ 牛都被你吹的快死完了~~~!!!

    [回复]

    余潇冉 回复:

    O(∩_∩)O哈哈哈~


发表您的评论