new static()是在PHP5.3版本中引入的新特性。

class Father{
    public function getNewFather(){
        return new self();
    }
 
    public function getNewCaller(){
        return new static();
    }
}
 
$f = new Father();
 
var_dump(get_class($f->getNewFather())); // Father
var_dump(get_class($f->getNewCaller())); // Father

这里无论是getNewFather还是getNewCaller都是返回的 Father 这个实列到这里貌似 new self() 还是 new static() 是没有区别的。

class Sun1 extends Father{
 
}
 
$sun1 = new Sun1();
var_dump($sun1->getNewFather()); // object(Father)#4 (0) { }
var_dump($sun1->getNewCaller()); // object(Sun1)#4 (0) { }

new self() 和 new static() 的区别了

  • 区别只有在继承中才能体现出来,如果没有任何继承,那么二者没有任何区别;
  • new self() 返回的实列是不会变的,无论谁去调用,都返回的一个类的实列;
  • new static() 则是由调用者决定的。

标签: self,static

仅有一条评论

  1. 学习了

添加新评论