名称解析遵循下列规则:
1、对完全限定名称的函数,类和常量的调用在编译时解析。例如new\A\B解析为类A\B。
2、所有的非限定名称和限定名称(非完全限定名称)根据当前的导入规则在编译时进行转换。例如,如果命名空间A\B\C被导入为C,那么对C\D\e()的调用就会被转换为A\B\C\D\e()。
3、在命名空间内部,所有的没有根据导入规则转换的限定名称均会在其前面加上当前的命名空间名称。例如,在命名空间A\B内部调用C\D\e(),则C\D\e()会被转换为A\B\C\D\e()。
4、非限定类名根据当前的导入规则在编译时转换(用全名代替短的导入名称)。例如,如果命名空间A\B\C导入为C,则newC()被转换为newA\B\C()。
5、在命名空间内部(例如A\B),对非限定名称的函数调用是在运行时解析的。例如对函数foo()的调用是这样解析的:
在当前命名空间中查找名为A\B\foo()的函数
尝试查找并调用全局(global)空间中的函数foo()。
6、在命名空间(例如A\B)内部对非限定名称或限定名称类(非完全限定名称)的调用是在运行时解析的。下面是调用newC()及newD\E()的解析过程:newC()的解析:
在当前命名空间中查找A\B\C类。
尝试自动装载类A\B\C。
newD\E()的解析:
在类名称前面加上当前命名空间名称变成:A\B\D\E,然后查找该类。
尝试自动装载类A\B\D\E。
为了引用全局命名空间中的全局类,必须使用完全限定名称new\C()。
需要先include/require相应的类。
北京白癜风治疗要多少钱北京治疗白癜风的价格是多少钱