当先锋百科网

首页 1 2 3 4 5 6 7

1、作用范围

以下类型的代码受命名空间的影响:类(包括抽象类和traits)、接口、函数和常量。


2、定义

(1)命名空间通过关键字namespace 来声明;

(2)必须在其它所有代码之前声明命名空间,所有非 PHP 代码包括空白符都不能出现在命名空间的声明(除了declare关键字。)

(3)同一个命名空间可以定义在多个文件中,即允许将同一个命名空间的内容分割存放在不同的文件中;

(4)子命名空间:与目录和文件的关系很象,PHP 命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义;

(5)不提倡在同一个文件中定义多个命名空间

3、使用

(1)非限定名称,或不包含前缀的类名称,例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。详情参见 使用命名空间:后备全局函数名称/常量名称。
(2)限定名称,或包含前缀的名称,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。
(3)完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。

(4)在命名空间内部访问全局类、函数和常量必须使用完全限定名称(包括命名空间前缀的类名称)。注意因为在动态的类名称、函数名称或常量名称中,限定名称和完全限定名称没有区别,因此其前导的反斜杠是不必要的。

*******在命名空间内部访问全局类、函数和常量需要加斜杠\

4、别名是通过操作符 use 来实现的