【发布时间】:2012-11-01 09:40:03
【问题描述】:
我有一个如下所示的抽象页面类:
abstract class Page {
public static function display() {
self::displayHeader();
self::displayContent();
self::displayFooter();
}
public static function displayContent() {
print "<p>some content</p>";
}
public static function displayHeader() {
include_once(kContent . "HeaderContent.class.php");
HeaderContent::display();
}
public static function displayFooter() {
include_once(kContent . "FooterContent.class.php");
FooterContent::display();
}
};
我想继承它的子类,并且只覆盖 displayContent 方法,因此页眉和页脚会自动显示,但仍然可以选择覆盖 display 方法,例如 .js 文件。
现在我有另一个类,看起来像这样:
class FooPage extends Page {
public static function displayContent() {
print "<p>Foo page</p>";
};
现在,它不再调用 FooPage 的 displayContent 方法,而是调用超类中的那个。
为什么?我能做什么?
编辑
我正在运行 PHP 5.2.17
【问题讨论】:
-
使用
static而不是self。 -
不是重复的,对我没用。
-
为什么
display()方法是静态的?不要这样做,如果你已经有一个对象。然后继承适用于$this。 -
那么你不会得到继承作为回报。 :) 由于静态绑定,
B::foo()将传递给A:foo(),它看起来就像是直接调用了A::foo()。你真的无能为力。
标签: php static overriding