后期静态绑定
自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。“后期绑定”的意思是说,static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。
self:: 的限制
使用 self:: 或者 __CLASS__ 对当前类的静态引用,取决于定义当前方法所在的类:
<?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();
运行输出结果:A
后期静态绑定的用法
后期静态绑定本想通过引入一个新的关键字来表示绕过运行时最初调用的类的限制。简单地说,这个关键字能够让你在上述例子中调用 test() 时引用的类是 B 而不是 A。最终决定不引入新的关键字,而是使用已经预留的 static 关键字。
<?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();
运行输出结果为:
B
以上为简单的后期绑定的一个例子,后期绑定在设计模式中用的较多,关于后期绑定更多参见php 文档:http://php.net/manual/zh/language.oop5.late-static-bindings.php。