在继承范围内引用静态调用的类
首先来看下面这个例子:
<?php
class Person
{
public static function status()
{
self::getStatus();
}
protected static function getStatus()
{
echo "我是过去";
}
}
// Deceased 继承 Person类
class Deceased extends Person
{
protected static function getStatus()
{
echo "未来已来";
}
}
Deceased::status(); // 输出:我是过去
?>
很明显,结果不是我们预期的,这是因为self::取决于定义时所在的类,而不是运行中的类。为了解决这个问题,你可能会在继承类中重写status()方法,但更好的解决方案是使用PHP 5.3后添加了后期静态绑定的功能。
<?php
class Person
{
public static function status()
{
static::getStatus();
}
protected static function getStatus()
{
echo "我是过去";
}
}
class Deceased extends Person
{
protected static function getStatus()
{
echo "未来已来";
}
}
Deceased::status(); // 输出:未来已来
//与预计输出一致。
?>