zoukankan      html  css  js  c++  java
  • 关于new static 与 new self的区别(后续有新发现,会继续更新)

    首先,我参考的是这位博主的文章:https://blog.csdn.net/qq_25600055/article/details/78549435

    前言,我之前是知道点延迟动态绑定的,真的是不看laravel源码,发现自己真的很落后。还停留在5 的时代。

    闲话不多说。上代码。

    class A {
      public static  function  get_self() {
        return new  self();
      }
    
      public static  function  get_static() {
        return new  static();
      }
    }
    
    class B extends A {
      //此处,是与我发的博文中的demo不同之处
      public static  function  get_self() {
          return new  self();
       }
    }

    在这个时刻,如果执行echo get_class(B::get_self()); 你会发现出来的会是B。
    原因很简单,就像原博中所总结的一样:

    self - 就是这个类,是代码段里面的这个类。

    static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类。

    因为,B复写了A中的方法,所以,B::get_self()执行出来的是B。
    没有复写A中的方法,执行getSelf(),由于继承的原因,会去执行父类中的方法,所以执行出来的结果是A。
    而static不同,无论你B有没有复写任何A中的方法,谁执行就是谁。

  • 相关阅读:
    python3----练习题(斐波那契)
    python3----运算符
    python3----函数、匿名函数
    python3----生成器generator(yield)
    Python捕获异常
    OS模块
    发送邮件
    IO文件读写
    Unittest框架概念
    生成报告
  • 原文地址:https://www.cnblogs.com/mikusnail/p/9132520.html
Copyright © 2011-2022 走看看