首頁  >  文章  >  後端開發  >  詳解PHP物件導向之後期靜態綁定

詳解PHP物件導向之後期靜態綁定

藏色散人
藏色散人轉載
2021-01-18 14:57:143002瀏覽

推薦:《PHP影片教學

#介紹

自PHP 5.3.0 起,PHP 增加了一個叫做後期靜態綁定的功能,用於在繼承範圍內引用靜態呼叫的類別。

準確地說,後期靜態綁定工作原理是儲存了在上一個「非轉送呼叫」(non-forwarding call)的類別名稱。當進行靜態方法呼叫時,該類別名稱即為明確指定的那個(通常在 :: 運算子左側部分);當進行非靜態方法呼叫時,即為該物件所屬的類別。所謂的「轉送呼叫」(forwarding call)指的是透過以下幾種方式進行的靜態呼叫:self::parent::static:: 以及forward_static_call()。可用 get_called_class() 函數來得到被呼叫的方法所在的類別名,static:: 則指出了其範圍。

轉送呼叫&非轉送呼叫

轉送呼叫

所謂的轉送呼叫是指:在類別的方法調用中轉送呼叫訊息(可以理解為呼叫堆疊資訊)

  • 轉送呼叫的時機

    • ##parent呼叫

    • self呼叫

    • static呼叫

    • forward_static_call()

      #非轉送呼叫

      所謂的非轉送呼叫是指:是明確的指定靜態呼叫的類別名稱或透過物件(偽物件)實例的呼叫

      #程式碼解析
      <?phpclass A{public static function foo(){
        static::who();}public static function who(){
        echo __CLASS__ . "\n";}}class B extends A{public static function test(){
        //非转发调用
        A::foo();
        //转发调用
        parent::foo();
        //转发调用
        self::foo();}public static function who(){
        echo __CLASS__ . "\n";}}class C extends B{public static function who(){
        echo __CLASS__ . "\n";}}//非转发调用C::test();

      後期靜態綁定

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

      後期靜態綁定實作原理

      後期靜態綁定工作原理是儲存了在上一個「非轉送呼叫」(non-forwarding call)的類別名。

      這句話的意思就是在程式運行過程中到底如何確認static是哪個類,確定規則是取上次儲存的非轉送呼叫的類

      後期靜態綁定應用

  • 單例繼承場景

  • #抽象類別和實作類別

以上是詳解PHP物件導向之後期靜態綁定的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除