【轉】PHP中的後期靜態綁定(Late Static Bindings )
阿新 • • 發佈:2018-08-23
mbo 代碼 當前 test num ngs color public name
php5.3版本新增的靜態綁定的靜態綁定語法,也成為PHP的後期靜態綁定,如下
class A{ public static function func1(){ echo __CLASS__.PHP_EOL; } public static function test(){ self::func1(); } } class B extend A{ public static function func1(){ echo __CLASS__.PHP_EOL; //__CLASS__是當前類的名稱 } } B::test(); 結果:A
但是,既然B繼承了A,並重寫了A的func1,那麽如果想讓test中執行的是B中的func1要怎麽做呢?於是,php5.3使用了預留的static關鍵字,將上述代碼中的test函數改成這樣:
public static function test(){ static::func1(); }
結果:B
也就是說:static::實現了後期靜態綁定,static::對應的變量不再是當前類的變量,而是由最終運算時動態決定的(也可以說從堆裏面提取出來的關鍵字)。
同時,在這個學習的過程中,我還發現另外一個用法:new static() 和 new self(), 同樣的,new static 就是實例化最終繼承的類,而new self就是實例化當前類, new parent就是實現當前類的父類了。
好了,順便提一下形如這種格式的用法有三種: “self::”、”parent::”、”static::”;
【轉】PHP中的後期靜態綁定(Late Static Bindings )