关于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中的方法,谁执行就是谁。

原文地址:https://www.cnblogs.com/mikusnail/p/9132520.html