这几天我一直在这方面苦苦挣扎,我得出了一个结论,但由于结论不是我想要的,所以在我放弃之前,我会尝试看看其他人怎么说。信仰最后死去……
假设我们有一个超类(称为“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();
再次,输出是“超级”,我什至在 Sub 中声明了 $title。
所以这意味着当我调用一个继承的静态函数时,函数的作用域将是超类,而不是被调用的那个(即使你打印回溯,它也会显示调用是在超类上进行的!!!),为了获得作为调用的子类的范围,我需要在该子类中重新声明该方法。好吧,这种方式违背了扩展类的目的,不是吗?
所以我的问题是,我可以扩展一个静态类,调用其中一个继承的方法并拥有子类的范围吗?或者至少能够识别它的类名?如果不是,我为什么要扩展静态类?
谢谢!