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

PHP 延遲靜態綁定機制詳解與實戰代碼示例

     編輯:PHP 相關知識

PHP 延遲靜態綁定機制詳解與實戰代碼示例

PHP 5.3 引入 static:: 關鍵字實現延遲靜態綁定(Late Static Binding, LSB),解決繼承體系中靜態調用綁定到父類的問題。本文通過代碼演示核心行為。

代碼示例

<?php
class A {
    protected static $def = '123456';
    public static function test() {
        echo get_class(new static); // 獲取實際調用類名
    }
    public static function test2() {
        echo static::$def; // 延遲綁定到調用類的靜態屬性
    }
}

class B extends A {
    protected static $def = '456789';
}

class C extends A {
    protected static $def = 'abcdef';
}

echo B::test();  echo '<br>'; // 輸出 B
echo C::test();  echo '<br>'; // 輸出 C
echo B::test2(); echo '<br>'; // 輸出 456789
echo C::test2(); echo '<br>'; // 輸出 abcdef
echo A::test();  echo '<br>'; // 輸出 A
echo A::test2(); echo '<br>'; // 輸出 123456

輸出結果

B
C
456789
abcdef
A
123456

核心解析

  • new static:實例化當前調用類(而非定義類)
  • static::$property / static::method():解析到調用類的靜態成員
  • self:: / __CLASS__:始終綁定到定義該代碼的類(早期綁定)

應用場景

  1. ActiveRecord 基類:static::tableName() 讓子類自動返回對應表名
  2. 工廠模式:static::create() 返回具體子類實例
  3. 配置繼承:子類覆蓋靜態配置屬性,父類邏輯自動讀取子類值

版本要求

PHP ≥ 5.3.0。5.3 以前無法實現真正的 LSB,只能通過 get_called_class() 等變通方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved