龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

5.3 命名空间――《PHP高级程序设计:模式、框架和测试》

时间:2009-12-17 12:00来源:未知 作者:admin 点击:
分享到:
5.3 命名空间 命名空间对于PHP类来说就像是文件和目录的关系,它们给类库添加了结构和层次组织关系。命名空间允许你为两个不同的类使用相同的类名称。例如,你也许希望有一个名

5.3 命名空间

命名空间对于PHP类来说就像是文件和目录的关系,它们给类库添加了结构和层次组织关系。命名空间允许你为两个不同的类使用相同的类名称。例如,你也许希望有一个名为Line的类,这个类会在图像上画一条线。然而,Line类的画线功能在处理像素格式图像和矢量格式图像时是大不一样的。理想的解决方案是使用两个带有命名空间的类,这样的话就可以给它们起相同的名称了。

命名空间使用了两个关键的语言结构:namespace和use。要声明一个命名空间,需要在文件的顶部指定命名空间的名称。在文件中声明的所有类和函数就属于这个命名空间了。namespace代码行必须在文件的顶部,在其他任何变量、类或者函数定义的前面。代码清单5-8演示了如何创建命名空间中的类。

代码清单5-8 声明命名空间(Vector.php)

namespace Vector;

class Line {

public function draw($x1, $y1, $x2, $y2) { . . . }

}

为了和命名空间一起使用,需重载作用域限定操作符(::)。例如,如果要在Vector命名空间中创建Line类的一个新实例,将使用作用域限定操作符,如代码清单5-9所示。

代码清单5-9 命名空间中的作用域限定

require_once('Vector.php');

$line = new Vector::Line();

$line->draw(1,1,10,10);

你可以使用多个层次的命名空间。例如,Graphics::Vector::Line就是一个有效的命名空间名称。唯一的限制就是在一个文件中只能声明一个命名空间。

随着命名空间越来越多,使用命名空间会显得有点烦琐。所幸,PHP还提供了use语句,允许给一个特定的命名空间起别名。代码清单5-10显示了如何使用use语句来缩短Line类的实例代码。

代码清单5-10 使用use语句

require_once('Vector.php');

use Vector::Line as Line;

$line = new Line();

$line->draw(1,1,10,10);

你还可以用use语句给整个命名空间起别名。

精彩图集

赞助商链接