(PHP 5 >= 5.3.0, PHP 7, PHP 8)
在说明名称解析规则之前,我们先看一些重要的定义:
       名称中不包含命名空间分隔符的标识符,例如 Foo
      
       名称中含有命名空间分隔符的标识符,例如 Foo\Bar
      
       名称中包含命名空间分隔符,并以命名空间分隔符开始的标识符,例如 \Foo\Bar。
       namespace\Foo 也是一个完全限定名称。
      
       这是个以 namespace 开头的标识符,
       例如
       namespace\Foo\Bar。
      
名称解析遵循下列规则:
\A\B 解析为 A\B。
     
    namespace。
      如果名称出现在全局命名空间,会截掉 namespace\ 前缀。
      例如,在命名空间 X\Y 里的 namespace\A 会被解析成 X\Y\A。
      在全局命名空间里,同样的名字却被解析成 A。
     
    A\B\C 被导入为 C,
      名称 C\D\E 会被翻译成
      A\B\C\D\E。
     
    A\B 内的名称 C\D\E
      会解析成 A\B\C\D\E。
     
    use A\B\C; 后,类似 new C() 这样的名称会解析为
      A\B\C()。
      类似的,use function A\B\fn; 后,
      fn() 的用法,解析名称为 A\B\fn。
     
    A\B 内的 new C() 
      会把名称解析为 A\B\C。
     
    A\B 中,
      下面演示了调用函数
      foo() 是如何解析的:
     
     A\B\foo()。
       
      foo()。
       
      示例 #1 名称解析示例
<?php
namespace A;
use B\D, C\E as F;
// 函数调用
foo();      // 首先尝试调用定义在命名空间"A"中的函数foo()
            // 再尝试调用全局函数 "foo"
\foo();     // 调用全局空间函数 "foo" 
my\foo();   // 调用定义在命名空间"A\my"中函数 "foo" 
F();        // 首先尝试调用定义在命名空间"A"中的函数 "F" 
            // 再尝试调用全局函数 "F"
// 类引用
new B();    // 创建命名空间 "A" 中定义的类 "B" 的一个对象
            // 如果未找到,则尝试自动装载类 "A\B"
new D();    // 使用导入规则,创建命名空间 "B" 中定义的类 "D" 的一个对象
            // 如果未找到,则尝试自动装载类 "B\D"
new F();    // 使用导入规则,创建命名空间 "C" 中定义的类 "E" 的一个对象
            // 如果未找到,则尝试自动装载类 "C\E"
new \B();   // 创建定义在全局空间中的类 "B" 的一个对象
            // 如果未发现,则尝试自动装载类 "B"
new \D();   // 创建定义在全局空间中的类 "D" 的一个对象
            // 如果未发现,则尝试自动装载类 "D"
new \F();   // 创建定义在全局空间中的类 "F" 的一个对象
            // 如果未发现,则尝试自动装载类 "F"
// 调用另一个命名空间中的静态方法或命名空间函数
B\foo();    // 调用命名空间 "A\B" 中函数 "foo"
B::foo();   // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法
            // 如果未找到类 "A\B" ,则尝试自动装载类 "A\B"
D::foo();   // 使用导入规则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法
            // 如果类 "B\D" 未找到,则尝试自动装载类 "B\D"
\B\foo();   // 调用命名空间 "B" 中的函数 "foo" 
\B::foo();  // 调用全局空间中的类 "B" 的 "foo" 方法
            // 如果类 "B" 未找到,则尝试自动装载类 "B"
// 当前命名空间中的静态方法或函数
A\B::foo();   // 调用命名空间 "A\A" 中定义的类 "B" 的 "foo" 方法
              // 如果类 "A\A\B" 未找到,则尝试自动装载类 "A\A\B"
\A\B::foo();  // 调用命名空间 "A\B" 中定义的类 "B" 的 "foo" 方法
              // 如果类 "A\B" 未找到,则尝试自动装载类 "A\B"
?>