Übergeordnete statische Methoden in PHP

Habe ich eine abstrakte page-Klasse so Aussehen:

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();
    }
};

Ich würde gerne Unterklasse von diesem, und nur das überschreiben der displayContent-Methode, sodass die Kopf-und Fußzeile wird automatisch angezeigt, aber immer noch die option zum überschreiben der Methode display zum Beispiel .js-Dateien.

Nun habe ich noch eine Klasse, die Aussehen wie diese:

class FooPage extends Page {
    public static function displayContent() {
        print "<p>Foo page</p>";    
};

Nun, anstelle von aufrufen der FooPage ist displayContent Methode, es ruft einfach nur die eine aus der Oberklasse.

Warum? Was kann ich tun?

BEARBEITEN

Ich bin mit PHP 5.2.17

Verwenden static statt self.
mögliche Duplikate von bei der Verwendung von selbst -, Eltern -, Statik-und wie?
nicht ein Duplikat ist, hat bei mir nicht funktioniert.
Warum ist die display() Methode statisch? Tun Sie es nicht, wenn Sie bereits ein Objekt. Und dann die Vererbung funktioniert mit $this.
Dann bekommt man nicht die Vererbung zurück. 🙂 B::foo() passieren zu A:foo() durch statische Bindung und es wird A::foo() als wenn es direkt aufgerufen. Nichts wirklich Sie über es tun können.

InformationsquelleAutor NSAddict | 2012-11-01

Schreibe einen Kommentar