new self
和 new static
的区别:两者都是实例化自身,区别在于继承。如果没有继承,则两者返回的实例都是属于一个类;如果有继承,子类调用该方法,new self
仍然返回原类的实例,而 new static
返回实际子类的实例。这就是延迟静态绑定,static 的值,使用的是最后实际调用那个方法的类。
new self
和 new static
的区别:两者都是实例化自身,区别在于继承。如果没有继承,则两者返回的实例都是属于一个类;如果有继承,子类调用该方法,new self
仍然返回原类的实例,而 new static
返回实际子类的实例。这就是延迟静态绑定,static 的值,使用的是最后实际调用那个方法的类。