PHP 的 new static 和 new self 具體有什麼?

james_xue發表於2019-08-01

下面我們舉個栗子:

class Father {
    public static function getSelf() {
        return new self();
    }

    public static function getStatic() {
        return new static();
    }
}

class Son extends Father {}

echo get_class(Son::getSelf()); // Father
echo get_class(Son::getStatic()); // Son
echo get_class(Father::getSelf()); // Father
echo get_class(Father::getStatic()); // Father

new self

這裡面注意這一行 get_class(Son::getStatic()); 返回的是 Son 這個 class,可以總結如下:
self 返回的是 new self 中關鍵字 new 所在的類中,比如這裡例子的 :

public static function getSelf() {
    return new self(); // new 關鍵字在 Father 這裡
}

始終返回 Father

new static

static 則上面的基礎上,更聰明一點點:static 會返回執行 new static() 的類,比如 Son 執行 get_class(Son::getStatic()) 返回的是 Son, Father 執行get_class(Father::getStatic()) 返回的是 Father

而在沒有繼承的情況下,可以認為 new selfnew static 是返回相同的結果。

原文地址:PHP 的 new static 和 new self 具體有什麼?

不要輕易放棄。學習成長的路上,我們長路漫漫,只因學無止境

Don't give up easily. On the way of learning and growing up, we have a long way to go, just because there is no end to learning.

相關文章