PHP延遲靜態繫結
阿新 • • 發佈:2018-12-06
“後期繫結”的意思是說,static:: 不再被解析為定義當前方法所在的類,而是在實際執行時計算的。
也可以稱之為“靜態繫結”,因為它可以用於(但不限於)靜態方法的呼叫。
<?php class 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(); ?>
result:A
<?php
class 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();
?>
result:B
B::test()呼叫時,程式碼段1中的self::指向的類A,程式碼段2中的static指向類B,所以結果有所不同
使用self::或者 __CLASS__對當前類的靜態引用,取決於定義當前方法所在的類,而static::的引用是當前執行的類,所以呼叫的是當前執行類的方法.