首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 靜態延遲綁定:static 關鍵字解決繼承多態難題

     編輯:PHP 綜合知識

問題背景

PHP 早期版本中,self:: 在繼承體系中存在限制:永遠解析為定義該方法的類,而非實際調用的子類。

self:: 的限制

class A {
    public static function echoClass() { echo __CLASS__; }
    public static function test() { self::echoClass(); }
}

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

B::test();  // 輸出:A (預期為 B)

static:: 延遲靜態綁定

PHP 5.3 引入 static::,執行時才解析實際調用類:

class A {
    public static function echoClass() { echo __CLASS__; }
    public static function test() { static::echoClass(); }  // 關鍵改動
}

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

B::test();  // 輸出:B ✓

核心差異

關鍵字解析時機繼承行為
self::編譯/定義時綁定定義類
static::執行時綁定實際調用類

應用場景

  • Active Record 模式基類
  • 工廠方法模式實作
  • 需要子類覆寫靜態行為的框架設計

注意事項

  • 僅適用於靜態方法/屬性存取
  • 非靜態上下文請使用 $this 或 get_called_class()
  • 過度使用可能增加程式碼理解難度
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved