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