1. 程式人生 > >PHP延遲靜態繫結

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(); // 注意這裡的static
    }
}

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::的引用是當前執行的類,所以呼叫的是當前執行類的方法.