首先,我参考的是这位博主的文章: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中的方法,谁执行就是谁。

相关文章:

  • 2021-10-22
  • 2022-12-23
  • 2022-12-23
  • 2021-04-11
  • 2022-01-15
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-04
  • 2022-12-23
  • 2022-12-23
  • 2021-12-25
  • 2021-07-05
相关资源
相似解决方案