技术开发 频道

PHP V5.3 中的新特性: 名称空间

    名称空间解析

  要熟悉名称空间的使用,其中一个难点就是了解如何进行范围解析。尽管清单 4 所示的简单例子是合理的,但是当我们开始对名称空间进行彼此嵌套时,或者在一个名称空间中试图针对全局空间发出调用是,就会出现问题。PHP V5.3 提供了可以以合理的方式自动解决这些问题的规则。

  让我们创建一些包含(include)文件,每个文件都定义了函数 hello()。

  清单 6. 在不同名称空间中定义的 hello() 函数

1 /* global.php */
2 <?php
3 function hello()
4 {
5     echo 'hello from the global scope!';
6 }
7 ?>
8
9 /* Foo.php */
10 <?php
11 namespace Foo;
12 function hello()
13 {
14     echo 'hello from the Foo namespace!';
15 }
16 ?>
17
18 /* Foo_Bar.php */
19 <?php
20 namespace Foo/Bar;
21 function hello()
22 {
23     echo 'hello from the Foo/Bar namespace!';
24 }
25 ?>
26

  清单 6 在三个不同范围内对 hello() 函数定义了三次:在全局范围内,在 Foo 名称空间中,在 Foo/Bar 名称空间中。根据发出 hello() 函数调用的范围,决定对哪个 hello() 函数执行调用。下面展示了这些调用的例子。在这里,我们将使用 Foo 名称空间查看如何在另一个名称空间中调用 hello() 函数。

  清单 7. 从 Foo 名称空间调用所有 hello() 函数

1 <?php
2 include './global.php';
3 include './Foo.php';
4 include './Foo_Bar.php';
5
6 use Foo;
7
8 hello();         // outputs 'hello from the Foo namespace!'
9 Bar\hello();   // outputs 'hello from the Foo/Bar namespace!'
10 \hello();       // outputs 'hello from the global scope!'
11 ?>
12

  可以看到,在当前名称空间内引用子名称空间时,可以缩短名称空间前缀(Foo/Bar/hello() 调用可被缩短为 Bar/hello())。并且我们看到如何指定以在全局空间内调用方法:只需使用名称空间操作符作为调用的前缀。

  现在,我们已经了解了名称空间的工作机制,下面我们将查看如何在自己的代码中使用它们。

0
相关文章