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()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_static()); // A
self 指的是解析上下文,而不是調用上下文。例子裡,self被解析為定義get_self()的A,而不是解析為調用self的B。
php5.3中引入了延遲靜態綁定的概念,該特性最明顯的標志就是新關鍵字static。static指的是被調用的類。例子裡B::get_static()將生產新的B,而不是實例化一個A