• PHP双冒号 范围解析操作符(::)的用法


    <?php
     class A {
         function example() {
             echo "I am the original function A::example().<br />\n";
         }
     }
     
     class B extends A {
         function example() {
             echo "I am the redefined function B::example().<br />\n";
             A::example();
         }
     }
     
     // A 类没有对象,这将输出
     //   I am the original function A::example().<br />
     A::example();
     
     // 建立一个 B 类的对象
     $b = new B;
     
     // 这将输出
     //   I am the redefined function B::example().<br />
     //   I am the original function A::example().<br />
     $b->example();
     ?>

    上面的例子调用了 A 类的函数 example(),但是这里并不存在 A 类的对象,因此不能这样用 $a->example() 或者类似的方法调用 example()。反而我们将 example() 作为一个类函数来调用,也就是说,作为一个类自身的函数来调用,而不是这个类的任何对象。

    这里有类函数,但没有类的变量。实际上,在调用函数时完全没有任何对象。因而一个类的函数可以不使用任何对象(但可以使用局部或者全局变量),并且可以根本不使用 $this 变量。

    上 面的例子中,类 B 重新定义了函数 example()。A 类中原始定义的函数 example() 将被屏蔽并且不再生效,除非使用 :: 运算符来访问 A 类中的 example() 函数。如:A::example()(实际上,应该写为 parent::example())。

    就此而论,对于当前对象,它可能有对象变量。因此可以在对象函数的内部使用 $this 和对象变量。

    出处:http://www.zhaiqianfeng.com    
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    图与链表的深拷贝
    Codeforces Round #686(Div.3) [C- Sequence
    前缀和
    递归改非递归
    STL源码剖析笔记
    第六章 进程
    C++ 设计模式--模板模式、策略模式、观察者模式
    宏定义方式 进行枚举类型和枚举类型的相互转换
    Linux常见信号介绍
    git rebase 操作
  • 原文地址:https://www.cnblogs.com/zhaiqianfeng/p/4618066.html
Copyright © 2020-2023  润新知