“后期绑定”的意思是说,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