前几天看见一段代码出现了new self(),没看懂什么意思,于是百度了下。
一、new static()和new self()?
两者都是实例化自身,区别在于继承。如果没有继承,则两者返回的实例都是属于一个类;如果有继承,子类调用该方法,new self 仍然返回原类的实例,而 new static 返回实际子类的实例。这就是延迟静态绑定,static 的值,使用的是最后实际调用那个方法的类。
<?php
class A
{
public static $a = 1;
public function test()
{
$s = new static();