美文网首页
new self和new static的区别

new self和new static的区别

作者: stormpertel | 来源:发表于2020-01-10 17:39 被阅读0次
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返回的是调用者的实例。

相关文章

网友评论

      本文标题:new self和new static的区别

      本文链接:https://www.haomeiwen.com/subject/crrmactx.html