我在这个领域已经苦苦挣扎了几天,虽然我得出了一个结论,但是由于这个结论不是我想要的,所以在放弃之前,我会尝试看看其他人说什么。信念最后死去...
假设我们有一个超类(称为“Super”)和一个子类(称为“Sub”)。
class Super {
protected static $title = 'super';
public static function get_class_name()
{
echo __CLASS__;
}
public static function get_title()
{
echo self::$title;
}
}
class Sub extends Super {
protected static $title = 'sub';
}
现在,您可能期望由于Sub扩展了Super,Sub现在将继承所有Super的方法,然而,它似乎只接收到对Sub方法的引用。我这样说是因为如果我调用:
Sub::get_class_name();
输出是"Super"而不是"Sub"。
如果我调用:
Sub::get_title();
再次运行代码,输出结果为“super”,即使我在子类中声明了$title。
这意味着,当我调用一个继承的静态函数时,函数的作用域将是超类,而不是被调用的那个类(即使你打印回溯,它也会显示调用是在超类上进行的!!!),为了获得作用域为调用该方法的子类,我需要在该子类中重新声明该方法。 这种情况似乎违背了扩展类的目的,不是吗?
因此,我的问题是:我是否可以扩展一个静态类,调用其中一个继承的方法,并具有子类的范围? 或者至少能够识别它的类名? 如果不能,为什么我要扩展静态类呢?
谢谢!