PHP命名空间的使用

PHP命名空间元素的使用类似我们目录系统的相对路径、绝对路径概念,分为不包含前缀的类名称(非限定名称)、包含前缀的类名称(限定名称)、包含全局操作符的类名称(完全限定名称)

不包含前缀的类名称(非限定名称)


例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。



包含前缀的类名称(限定名称)

例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。


包含全局操作符的类名称(完全限定名称)

例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。


实质区别是:class-》namespace/class -》/namespace/class