• 命名空间--名称解析规则


    (PHP 5 >= 5.3.0, PHP 7)

    PHP 命名空间中,类名可以通过三种方式引用:

    1. 非限定名称(Unqualified name),名称中不包含命名空间分隔符的标识符,如Foo
      例子 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是currentnamespace,foo 将被解析为currentnamespacefoo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 
    2. 限定名称(Qualified name),名称中含有命名空间分隔符的标识符,如 FooBar。
      例子 $a = new subnamespacefoo(); 或 subnamespacefoo::staticmethod();。如果当前的命名空间是currentnamespace,则 foo 会被解析为 currentnamespacesubnamespacefoo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespacefoo。
    3. 完全限定名称,(Fully qualified name)名称中包含命名空间分隔符,并以命名空间分隔符开始的标识符,例如 FooBar namespaceFoo 也是一个完全限定名称。
      例子 $a = new currentnamespacefoo(); 或 currentnamespacefoo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespacefoo。

    名称解析遵循下列规则:

    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() 的解析过程:

      在当前命名空间中查找名为 ABfoo() 的函数
      尝试查找并调用 全局(global) 空间中的函数 foo()。

        7.为了引用全局命名空间中的全局类,必须使用完全限定名称 new C()

  • 相关阅读:
    使用 javascript 替换 jQuery
    几个非常实用的JQuery代码片段
    分析ajax请求过程以及请求方法
    使用mpvue开发github小程序总结
    Element UI table组件源码分析
    使用web-component搭建企业级组件库
    vue项目开发过程常见问题
    vue权限路由实现方式总结
    关于父组件通过v-on接收子组件多个参数的一点研究
    vue使用flexible和px2rem实现移动端适配
  • 原文地址:https://www.cnblogs.com/kjitboy/p/5159351.html
Copyright © 2020-2023  润新知