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