PHP 的 new static 和 new self

2020-07-16 10:05:44
下面我們舉個栗子:

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 self 和 new static 是返回相同的結果。

以上就是PHP 的 new static 和 new self的詳細內容,更多請關注TW511.COM其它相關文章!