首頁  >  文章  >  後端開發  >  【php類別與物件】後期靜態綁定

【php類別與物件】後期靜態綁定

不言
不言原創
2018-04-17 14:00:461322瀏覽

這篇文章介紹的內容是關於【php類別與物件】後期靜態綁定,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

後期靜態綁定

PHP 5.3.0

用於:繼承範圍內引用靜態呼叫的類別

工作原理:

  • ##儲存了在上一個「非轉送呼叫」(non-forwarding call)的類別名稱。

  • 當靜態方法呼叫時,該類別名稱即為明確指定的那個(通常在:: 運算子左側部分);

  • #當進行非靜態方法呼叫時,即為該物件所屬的類別。

轉送呼叫(forwarding call): 透過 self::,parent::,static:: , forward_static_call() (呼叫靜態方法)的靜態呼叫。

可用 get_called_class() 函數來得到被呼叫的方法所在的類別名,static:: 則指出了其範圍。

此功能從語言內部角度考慮被命名為「後期靜態綁定」。

「後期綁定」的意思是說,static:: 不再被解析為定義當前方法所在的類,而是在實際運行時計算的。
也可以稱之為“靜態綁定”,因為它可以用於(但不限於)靜態方法的呼叫。

<?phpclass 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();  //A?>


後期靜態綁定的用法

後期靜態綁定本想透過引入一個新的關鍵字表示運行時最初呼叫的類別來繞過限制。

簡單來說,這個關鍵字能夠讓你在上述例子中呼叫 test() 時引用的類別是 B 而不是 A。最後決定不引入新的關鍵字,而是使用已經預留的 static 關鍵字。

Example #2 static:: 简单用法<?phpclass 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();  //B?>

在非靜態環境下,所呼叫的類別即為該物件實例所屬的類別。由於 $this-> 會在相同作用範圍內嘗試呼叫私有方法,而 static:: 則可能會給出不同結果。

另一個差異是 static:: 只能用於靜態屬性。

後期靜態綁定

PHP 5.3.0

用於:繼承範圍內引用靜態呼叫的類別

##工作原理:

    儲存了在上一個「非轉送呼叫」(non-forwarding call)的類別名稱。
  • 當靜態方法呼叫時,該類別名稱即為明確指定的那個(通常在:: 運算子左側部分);
  • #當進行非靜態方法呼叫時,即為該物件所屬的類別。
  • 轉送呼叫(forwarding call): 透過 self::,parent::,static:: , forward_static_call() (呼叫靜態方法)的靜態呼叫。
可用 get_called_class() 函數來得到被呼叫的方法所在的類別名,static:: 則指出了其範圍。


此功能從語言內部角度考慮被命名為「後期靜態綁定」。

「後期綁定」的意思是說,static:: 不再被解析為定義當前方法所在的類,而是在實際運行時計算的。

也可以稱之為“靜態綁定”,因為它可以用於(但不限於)靜態方法的呼叫。

<?phpclass 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();  //A?>


後期靜態綁定的用法

後期靜態綁定本想透過引入一個新的關鍵字表示運行時最初呼叫的類別來繞過限制。

簡單來說,這個關鍵字能夠讓你在上述例子中呼叫 test() 時引用的類別是 B 而不是 A。最後決定不引入新的關鍵字,而是使用已經預留的 static 關鍵字。

Example #2 static:: 简单用法<?phpclass 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();  //B?>

在非靜態環境下,所呼叫的類別即為該物件實例所屬的類別。由於 $this-> 會在相同作用範圍內嘗試呼叫私有方法,而 static:: 則可能會給出不同結果。

另一個差異是 static:: 只能用於靜態屬性。


相關建議:

【php類別與物件】類型約束

【php類別與物件】物件複製

#【php類別與物件】魔術方法

#

以上是【php類別與物件】後期靜態綁定的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn