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
这里new self 和 new static 都是返回的Father的实例。
class Son extends Father
{
...
}
$son = new Son;
var_dump($sun1->getNewFather()); // object(Father)#4 (0) { }
var_dump($sun1->getNewCaller()); // object(Son)#4 (0) { }
在这发现new self返回的是父类Father的实例,而new static返回的是Son的实例。
new self返回的实例是不变的,而new static返回的是调用者的实例。
网友评论