new self和new static的区别

2020-01-10  本文已影响0人  stormpertel
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返回的是调用者的实例。

上一篇 下一篇

猜你喜欢

热点阅读