recca chao 的 gitHub page

寫一些技術文件,筆記,雜七雜八

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