标题: php6 namespace
Verdana
新手上路
Rank: 1



UID 39
精华 1
积分 10
帖子 18
翻译 0
原创 0
阅读权限 10
注册 2007-5-23
状态 离线
发表于 2007-7-23 11:42  资料  主页 短消息  加为好友 
php6 namespace

PHP6 的 namespace

PHP6 的 snapshot 版本中,namespace 功能已经实现了

一、如何定义 namespace?


PHP代码如下:
// net/phpvim/code/Shape.php
namespace net::phpvim::code;

class 
Shape{
}

function 
draw() {
    return 
"draw() in Shape.php\n";
}

function 
getCurrentNS() {
    return 
__NAMESPACE__;
}

/* vim: set expandtab tabstop=4 shiftwidth=4: */




所有的类和函数名称会自动加上 namespace 名称作为前缀,相同的 namespace 也可以在多个 PHP 文件中被定义。

比如上面的代码中,完整的类名和函数名是:

net::phpvim::code::Shape
net::phpvim::code::draw()


二、如何使用呢?


PHP代码如下:
// net/phpvim.net/code/Painter.php
require_once 'net/phpvim/code/Shape.php';

import net::phpvim::code;
import net::phpvim::code::Shape;
import net::phpvim::code::Shape as CPC_Shape;

// Create an instance object for Shape class
$shape0 = new net::phpvim::code::Shape();
$shape1 = new code::Shape();
$shape2 = new Shape();
$shape3 = new CPC_Shape();

// output: draw() in Shape.php
print net::phpvim::code::draw();
print 
code::draw();

// output: net::phpvim::code
print code::getCurrentNS();

/* vim: set expandtab tabstop=4 shiftwidth=4: */




import 指令

import 可以将任意的 package(这里借用一下 Java 的概念)导入到当前 scope 中来。
import 不可以使用在函数或者类中。
import 生效范围为当前定义位置到所在文件的结尾。
import 可以通过 AS 关键字定义别名。
import A::B; 等同于 import A::B as B。


三、其它
特殊的 empty namespace ::


PHP代码如下:
import net::phpvim::code;
// 调用会失败,因为 draw()  是定义在net::phpvim::code 的 namespace 下面
// 而不是在全局范围内
echo ::draw(); 
/* vim: set expandtab tabstop=4 shiftwidth=4: */




:: 是一个特殊的 namespace,以 :: 开头的调用,将会在 global 范围查找并绑定相应的 Class 或者 Function。换句话说,定义在任意 namespace 中的 draw() 函数都不会被调用,而是调用 global 范围内的 draw() 函数。

constant __NAMESPACE__

__NAMESPACE__ 表示当前的 namespace 的名称。





顶部
Haohappy
超级版主
Rank: 8Rank: 8
PHPEye站长


UID 2
精华 11
积分 110
帖子 283
翻译 6
原创 1
阅读权限 150
注册 2007-5-2
状态 离线
发表于 2007-7-23 14:03  资料  短消息  加为好友  添加 haohappy 为MSN好友 通过MSN和 haohappy 交谈
呵呵,不错。 这样应该更方便对项目进行打包,要是也能像Java那样生成一个jar包/phar包,就更完美了。





互助共享,共同成长。
顶部
wps2000
新手上路
Rank: 1



UID 34
精华 0
积分 0
帖子 73
翻译 0
原创 0
阅读权限 10
注册 2007-5-20
状态 离线
发表于 2007-7-23 15:27  资料  短消息  加为好友 
还是加上来了?





顶部
diogin
版主
Rank: 7Rank: 7Rank: 7



UID 16
精华 1
积分 10
帖子 38
翻译 0
原创 0
阅读权限 100
注册 2007-5-4
来自 广东省广州市
状态 离线
发表于 2007-7-24 17:54  资料  短消息  加为好友 
呵呵,我先观望阵子再说。





The world is everything that is the case.
顶部
Yimin
新手上路
Rank: 1



UID 4
精华 0
积分 0
帖子 4
翻译 0
原创 0
阅读权限 10
注册 2007-5-2
来自 杭州
状态 离线
发表于 2007-8-27 00:53  资料  主页 短消息  加为好友  添加 Yimin 为MSN好友 通过MSN和 Yimin 交谈 QQ
完美..

顶部
mayongzhan
PHPEye Developer
Rank: 8Rank: 8


UID 136
精华 2
积分 20
帖子 41
翻译 18
原创 1
阅读权限 1
注册 2007-6-30
状态 离线
发表于 2007-8-28 17:11  资料  短消息  加为好友 
想想php还缺什么.都加上...





顶部
PHPjiang
新手上路
Rank: 1



UID 322
精华 0
积分 0
帖子 1
翻译 0
原创 0
阅读权限 10
注册 2007-8-30
状态 离线
发表于 2007-8-30 17:12  资料  短消息  加为好友 

顶部
lightsaber
新手上路
Rank: 1



UID 353
精华 0
积分 0
帖子 1
翻译 0
原创 0
阅读权限 10
注册 2007-9-11
状态 离线
发表于 2007-9-11 11:49  资料  短消息  加为好友 
以前写的导入包的代码又废掉了
不过滥用导入一个包的类,对性能有影响。

[ 本帖最后由 lightsaber 于 2007-9-11 11:53 编辑 ]

顶部
hongfu
新手上路
Rank: 1



UID 120
精华 0
积分 0
帖子 2
翻译 0
原创 0
阅读权限 10
注册 2007-6-26
状态 离线
发表于 2007-11-23 22:18  资料  短消息  加为好友 
还不如import com.insenz.com这样得了,PHP要整成啥样

顶部
21gsoul
新手上路
Rank: 1



UID 671
精华 0
积分 0
帖子 4
翻译 0
原创 0
阅读权限 10
注册 2007-12-22
状态 离线
发表于 2007-12-22 09:02  资料  短消息  加为好友 
php namespace 不用等到 php 6,php 5.3 就已经实现。

关于php 5.3 的新特性建议读一下 Gergely Hodicska 的几篇 blog 文章:

http://blog.felho.hu/stone/php-53

其中一篇非常详细地描述了php namespace:

http://blog.felho.hu/whats-new-in-php-53-part-1-namespaces.html

顶部
 


PHPEye开源社区


当前时区 GMT+8, 现在时间是 2008-12-5 08:49

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.028423 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - PHPEye开源社区 - Archiver