名称解析遵循下列规则:
1. 对完全限定名称的函数,类和常量的调用在编译时解析。例如 new AB 解析为类 AB。
2. 所有的非限定名称和限定名称(非完全限定名称)根据当前的导入规则在编译时进行转换。例如,如果命名空间 ABC 被导入为 C,那么对 CDe() 的调用就会被转换为 ABCDe()。
3 .在命名空间内部,所有的没有根据导入规则转换的限定名称均会在其前面加上当前的命名空间名称。例如,在命名空间 AB 内部调用 CDe(),则 CDe() 会被转换为 ABCDe() 。
4.非限定类名根据当前的导入规则在编译时转换(用全名代替短的导入名称)。例如,如果命名空间 ABC 导入为C,则 new C() 被转换为 new ABC() 。
5. 在命名空间内部(例如AB),对非限定名称的函数调用是在运行时解析的。例如对函数 foo() 的调用是这样解析的:
在当前命名空间中查找名为 ABfoo() 的函数 尝试查找并调用 全局(global) 空间中的函数 foo()。6. 在命名空间(例如AB)内部对非限定名称或限定名称类(非完全限定名称)的调用是在运行时解析的。下面是调用 new C() 及 new DE() 的解析过程: new C()的解析:
在当前命名空间中查找ABC类。 尝试自动装载类ABC。new DE()的解析:
在类名称前面加上当前命名空间名称变成:ABDE,然后查找该类。 尝试自动装载类 ABDE。为了引用全局命名空间中的全局类,必须使用完全限定名称 new C()。
以上就是详细分析PHP 命名空间(namespace)的详细内容,更多关于PHP 命名空间(namespace)的资料请关注易采站长站其它相关文章!







