
2007-7-23 11:42
Verdana
php6 namespace
PHP6 的 namespace :)
PHP6 的 snapshot 版本中,namespace 功能已经实现了
[b]一、如何定义 namespace?[/b]
[font=Courier New]
[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: */
[/php]
[/font]
所有的类和函数名称会自动加上 namespace 名称作为前缀,相同的 namespace 也可以在多个 PHP 文件中被定义。
比如上面的代码中,完整的类名和函数名是:
net::phpvim::code::Shape
net::phpvim::code::draw()
[b]二、如何使用呢?[/b]
[font=Courier New]
[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: */
[/php]
[/font]
import 指令
import 可以将任意的 package(这里借用一下 Java 的概念)导入到当前 scope 中来。
import 不可以使用在函数或者类中。
import 生效范围为当前定义位置到所在文件的结尾。
import 可以通过 AS 关键字定义别名。
import A::B; 等同于 import A::B as B。
[b]三、其它[/b]
特殊的 empty namespace ::
[font=Courier New]
[php]
import net::phpvim::code;
// 调用会失败,因为 draw() 是定义在net::phpvim::code 的 namespace 下面
// 而不是在全局范围内
echo ::draw();
/* vim: set expandtab tabstop=4 shiftwidth=4: */
[/php]
[/font]
:: 是一个特殊的 namespace,以 :: 开头的调用,将会在 global 范围查找并绑定相应的 Class 或者 Function。换句话说,定义在任意 namespace 中的 draw() 函数都不会被调用,而是调用 global 范围内的 draw() 函数。
constant __NAMESPACE__
__NAMESPACE__ 表示当前的 namespace 的名称。
2007-7-23 14:03
Haohappy
呵呵,不错。 这样应该更方便对项目进行打包,要是也能像Java那样生成一个jar包/phar包,就更完美了。
2007-7-23 15:27
wps2000
还是加上来了?
2007-7-24 17:54
diogin
呵呵,我先观望阵子再说。
2007-8-27 00:53
Yimin
完美..
2007-8-28 17:11
mayongzhan
想想php还缺什么.都加上...
2007-8-30 17:12
PHPjiang
:lol :lol :lol
2007-9-11 11:49
lightsaber
以前写的导入包的代码又废掉了:Q
不过滥用导入一个包的类,对性能有影响。
[[i] 本帖最后由 lightsaber 于 2007-9-11 11:53 编辑 [/i]]
2007-11-23 22:18
hongfu
还不如import com.insenz.com这样得了,PHP要整成啥样:L
2007-12-22 09:02
21gsoul
php namespace 不用等到 php 6,php 5.3 就已经实现。
关于php 5.3 的新特性建议读一下 Gergely Hodicska 的几篇 blog 文章:
[url=http://blog.felho.hu/stone/php-53]http://blog.felho.hu/stone/php-53[/url]
其中一篇非常详细地描述了php namespace:
[url=http://blog.felho.hu/whats-new-in-php-53-part-1-namespaces.html]http://blog.felho.hu/whats-new-in-php-53-part-1-namespaces.html[/url]
2007-12-24 10:19
ZiNYon!
怎么感觉 php变成java了?
2007-12-24 16:18
kekey
:lol 还没用到过这种技术,努力学习。
2008-1-7 23:23
fidy
[quote]原帖由 [i]21gsoul[/i] 于 2007-12-22 09:02 发表 其中一篇非常详细地描述了php namespace:
[url=http://blog.felho.hu/whats-new-in-php-53-part-1-namespaces.html]http://blog.felho.hu/whats-new-in-php-53-part-1-namespaces.html[/url]
[/quote]
这篇我简单翻译了一下,英文不太好的兄弟可以凑合看看...
[url]http://fidy.phpbomb.com/?p=12[/url]
页:
[1]
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.