在 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