Recca Chao 的 gitHub page

推廣網站開發,包含 Laravel 和 Kotlin 後端撰寫、自動化測試、讀書心得等。Taiwan Kotlin User Group 管理員。

View on GitHub

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

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

class B extends A {}

echo get_class(B::getSelf()); // A
echo get_class(B::getStatic()); // B
echo get_class(A::getSelf()); // A
echo get_class(A::getStatic()); // A

self 代表這個實際下 new 這個關鍵字的類別。在上面的例子裡面,就是 A 這個類別。

static 則代表呼叫該函式的物件。所以在上面的例子裡,會是 B 這個類別。

參考資料:https://stackoverflow.com/questions/5197300/new-self-vs-new-static