「後期綁定」的意思是說,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
<?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
code
B::test()調用時,代碼段1中的self::指向的類A,代碼段2中的static指向類B,因此結果有所不一樣io
使用self::或者 __CLASS__對當前類的靜態引用,取決於定義當前方法所在的類,而static::的引用是當前運行的類,因此調用的是當前運行類的方法.function