1. 程式人生 > >【轉】PHP中的後期靜態綁定(Late Static Bindings )

【轉】PHP中的後期靜態綁定(Late Static Bindings )

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 )