先看一个例子:php
<?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(); ?>
输出:code
A
若是使用后期绑定:io
<?php class A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 后期静态绑定从这里开始 } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); ?>
输出:function
B
使用 self:: 或者 CLASS 对当前类的静态引用,取决于定义当前方法所在的类,而不是调用者所在的类。class
“后期绑定”的意思是说,static:: 再也不被解析为定义当前方法所在的类,而是在实际运行时计算的。也能够称之为“静态绑定”,由于它能够用于(但不限于)静态方法的调用。test