Surchargeant les méthodes statiques en PHP

J'ai une page de résumé de la classe comme ceci:

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

Je voudrais sous-classe de ce, et remplacez uniquement les displayContent méthode, de sorte que l'en-tête et pied de page est affiché automatiquement, mais ayant encore la possibilité de remplacer la méthode d'affichage, par exemple pour .js fichiers.

Maintenant, j'ai une autre classe, comme ceci:

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

Maintenant, au lieu d'appeler la FooPage de displayContent méthode, il se contente d'appeler celui de la classe mère.

Pourquoi? Que puis-je faire?

MODIFIER

Je suis en cours d'exécution PHP 5.2.17

Utilisation static au lieu de self.
double possible de lors de l'utilisation de l'auto, le parent, le statique et comment?
pas un doublon, n'a pas fonctionné pour moi.
Pourquoi le display() méthode statique? Ne pas le faire, si vous disposez déjà d'un objet. Et puis l'héritage fonctionne avec $this.
Ensuite, vous n'obtenez pas d'héritage en retour. 🙂 B::foo() sera de passer à travers A:foo() à cause de la statique de la liaison et il cherchera à A::foo() comme si il a été appelé directement. Vraiment rien que vous pouvez faire à ce sujet.

OriginalL'auteur NSAddict | 2012-11-01