後期靜態繫結

laraverer發表於2021-06-23

後期靜態繫結

從PHP5.3.0開始,PHP增加了一個叫做後期靜態繫結的功能,用於在繼承範圍內引用靜態呼叫的類,即在類的繼承過程中,使用的類不在是當前類,而是呼叫的類。後期靜態繫結使用關鍵字static來實現,透過這種機制,“static::”不在被解析為定義當前方法所在的類,而是在實際執行中計算得到的,即為執行時最初呼叫的類。雖然將其稱之為“後期靜態繫結”,但它不僅限制於靜態方法的呼叫。下面介紹一個具體的例項。

class A{
    public static function call(){
        echo "class A"."<br>";
    }

    public static function test(){
        self::call();
        static::call();
    }
}

class B extends A{
    public static function call(){
        echo "class B"."<br>";
    }
}

B::test();

透過上述例項可以看出,在呼叫test()函式時,“self::”是直接呼叫本類中的方法,而static是根據呼叫test()函式的類來決定“static::”的值,因此static的值只有在呼叫時才能確定下來,而self則是在定義時就確定下來的。需要注意的的是,static並不限於靜態方法的呼叫,同樣適用於非靜態函式的呼叫,呼叫的方式同上述靜態函式一樣,是在呼叫時動態確定的。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章