后期静态绑定
从PHP5.3.0开始,PHP增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类,即在类的继承过程中,使用的类不在是当前类,而是调用的类。后期静态绑定使用关键字static来实现,通过这种机制,“static::”不在被解析为定义当前方法所在的类,而是在实际运行中计算得到的,即为运行时最初调用的类。虽然将其称之为“后期静态绑定”,但它不仅限制于静态方法的调用。下面介绍一个具体的实例。
class A{
public static function call(){
echo "class A"."<br>";
}
public static function test(){
self::call();
static::call();
}
}
class B extends A{
public static function call(){
echo "class B"."<br>";
}
}
B::test();
通过上述实例可以看出,在调用test()函数时,“self::”是直接调用本类中的方法,而static是根据调用test()函数的类来决定“static::”的值,因此static的值只有在调用时才能确定下来,而self则是在定义时就确定下来的。需要注意的的是,static并不限于静态方法的调用,同样适用于非静态函数的调用,调用的方式同上述静态函数一样,是在调用时动态确定的。