显式地将名称空间引用为调用的前缀。另一种方法是为名称空间定义一个别名并使用该别名作为调用的前缀,这样做的目的是简化名称空间前缀。最后,我们可以只在代码中使用名称空间,这就使它成为默认名称空间,并且在默认情况下,使所有代码都引用默认名称空间。清单 4 演示了调用之间的不同之处。
清单 4. 在名称空间内调用函数
1 /* Foo.php */
2 <?php
3 namespace Foo;
4 function bar()
5 {
6 echo "calling bar.";
7 }
8 ?>
9
10 /* File1.php */
11 <?php
12 include ''./Foo.php'';
13 Foo/bar(); // outputs "calling bar.";
14 ?>
15
16 /* File2.php */
17 <?php
18 include ''./Foo.php'';
19 use Foo as ns;
20 ns/bar(); // outputs "calling bar.";
21 ?>
22
23 /* File3.php */
24 <?php
25 include ''./Foo.php'';
26 use Foo;
27 bar(); // outputs "calling bar.";
28 ?>
29
清单 4 演示了在名称空间 Foo 内调用函数 bar() 的不同方法。在 File1.php 内,我们看到了如何进行显式调用,使用名称空间的名称作为调用前缀。File2.php 使用名称空间名称的别名,因此我们使用别名代替名称空间的名称。最后,File3.php 仅使用名称空间,这允许我们不需要使用任何前缀来调用 bar()。
我们还可以在一个文件内定义多个名称空间,只需要在文件中添加更多 namespace 调用。清单 5 演示了这一点。
清单 5. 文件中的多个名称空间
1 <?php
2 namespace Foo;
3 class Test {}
4
5 namespace Bar;
6 class Test {}
7
8 $a = new Foo\Test;
9 $b = new Bar\Test;
10
11 var_dump($a, $b);
12
13 Output:
14 object(Foo\Test)#1 (0) {
15 }
16 object(Bar\Test)#2 (0) {
17 }
18
现在我们已经基本了解了如何在名称空间内进行调用,让我们了解一些更复杂的名称空间调用以及它们如何工作。