PHP延遲靜態綁定

“後期綁定”的意思是說,static:: 不再被解析爲定義當前方法所在的類,而是在實際運行時計算的。
也可以稱之爲“靜態綁定”,因爲它可以用於(但不限於)靜態方法的調用。  
<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        self::who();
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();
?> 

result:A

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // 後期靜態綁定從這裏開始
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();
?>

result:B

B::test()調用時,代碼段1中的self::指向的類A,代碼段2中的static指向類B,所以結果有所不同

使用self::或者 __CLASS__對當前類的靜態引用,取決於定義當前方法所在的類,而static::的引用是當前運行的類,所以調用的是當前運行類的方法.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章