background image

完全限定名称是没有任何歧义的,开头的反斜线和文件路径的作用有点类似,它表

“ ”

示 根 全局空间,如果我们在全局空间中实现了一个不同的 MyFunction( ),可以使
用\MyFunction( )从 lib1.php 或 lib2.php 调用它。

完全限定名称对一次性函数调用或对象初始化非常有用,但当你产生了大量的调用

时它们就没有实用价值了,在下面的讨论中我们将会看到,PHP 提供了其它选项以解除
我们为命名空间打字的烦恼。

◆限定名称(Qualified name)
至少有一个命名空间分隔符的标识符,如 Lib1\MyFunction( )。
◆非限定名称(Unqualified name)
没有命名空间分隔符的标识符,如 MyFunction( )。
在相同的命名空间内工作
仔细思考下面的代码:
myapp1.php

1. < ?php  
2. namespace App\Lib1;  
3.  
4.

require_once

(

'lib1.php'

);  

5.

require_once

(

'lib2.php'

);  

6.  
7. header(

'Content-type: text/plain'

);  

8. echo MYCONST . 

"\n"

;  

9. echo MyFunction() . 

"\n"

;  

10. echo MyClass::WhoAmI() . 

"\n"

;  

?>  
即使我们同时包括了 lib1.php 和 lib2.php,MYCONST,MyFunction 和 MyClass

标识符只能在 lib1.php 中引用,这是因为 myapp1.php 的代码在相同的 App\Lib1 命名
空间内。

执行结果:

1. App\Lib1\MYCONST  
2. App\Lib1\MyFunction  
3. App\Lib1\MyClass::WhoAmI  

命名空间导入
可以使用 use 操作符导入命名空间,如:
myapp2.php

1. < ?php  
2.

use

 App\Lib2;  

3.  
4.

require_once

(

'lib1.php'

);  

5.

require_once

(

'lib2.php'

);