PHP 的 static 與 self 兩個關鍵字的差異

Written by Simon Asika on

在 PHP 的語法中,我們都知道 self 代表的是當下靜態 class 的自己,所以我們可以用 $instance = new self($a, $b); 來取得由自己生成的物件。

但另外有一個 static 關鍵字也可以用,例如 $instance = new static($a, $b); ,兩者差異在於,當B類別繼承自A類別時,若使用的是 A 類別的 Method,此時self會代表A類別,static代表B類別。若使用的是 B 類別的 Method,則static代表A類別,self代表B類別。

換句話講 self 代表 get_class()static 代表 get_called_class()

聽起來有點複雜,我們直接用以下程式作為範例比較容易了解:

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

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

class B extends A {}

echo get_class(B::get_self());   // return A
echo get_class(B::get_static()); // return B
echo get_class(A::get_static()); // return A

程式來源: http://stackoverflow.com/questions/5197300/new-self-vs-new-static

Control Tools

WS-logo