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__:始終綁定到定義該代碼的類(早期綁定)static::tableName() 讓子類自動返回對應表名static::create() 返回具體子類實例PHP ≥ 5.3.0。5.3 以前無法實現真正的 LSB,只能通過 get_called_class() 等變通方案。