erweitern statische Methoden in php
class Foo {
public static function foobar() {
self::whereami();
}
protected static function whereami() {
echo 'foo';
}
}
class Bar extends Foo {
protected static function whereami() {
echo 'bar';
}
}
Foo::foobar();
Bar::foobar();
erwartete Ergebnis foobar
tatsächliche Ergebnis foofoo
noch schlimmer zu machen, der server hat nur php 5.2
- PHP 5.3 eingeführt late static bindings. Sieht aus wie Sie vielleicht Pech mit 5.2
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Beitrag deckt es ziemlich gut: Warum macht PHP 5.2+ verbieten abstrakte statische Klasse, die Methoden? .
Alles, was Sie brauchen, ist ein ein-Wort ändern!
Das problem ist die Art, wie Sie Sie nennen whereami(), statt self::, die Sie verwenden sollten statisch::. So Klasse Foo sollte wie folgt Aussehen:
In einem anderen Wort, 'static' macht tatsächlich den Aufruf whereami() dynamisch 🙂 - es hängt davon ab, welche Klasse der Aufruf ist in.
Haben Sie nicht zum überschreiben der übergeordneten Funktion foobar() zu?
Versuchen, die Verwendung des singleton-Musters: