Hallo,
ich habe eine abstrakte Basisklasse, die zum einen bestimmte abstrakte Methoden deklariert - und zum anderen eigene Logik beinhaltet. Einige Funktionen benoetigen jedoch Werte aus den einzelnen Klassen, welche diese abstrakte Basisklasse mittels extends als Superclass nutzen.
abstract class AbsBase {
public abstract function DoSth();
public function DoMore() {
$this->DoSth();
echo "!";
}
}
class MyClass extends AbsBase {
public function DoSth() { echo "ja"; }
}
$MyClass = new MyClass;
$MyClass->DoSth(); // output: ja
$MyClass->DoMore(); // output: ja!
Das obige Beispiel funktioniert wie gewuenscht.
Nun unterliege ich jedoch aus bestimmten Gruenden der Tatsache, dass einige Methoden statischer Natur sein sollten. Und an dieser Stelle fangen dann bei mir die Verstaednisprobleme an. Ich verstehe nicht, warum OOP (im Allgemeinen) mir das nicht erlaubt.
abstract class AbsBase {
public static abstract function DoSth();
public static function DoMore() {
self::DoSth();
echo "!";
}
}
class MyClass extends AbsBase {
public static function DoSth() { echo "ja"; }
}
MyClass::DoSth(); // output: ja
MyClass::DoMore(); // eror: Fatal error: Cannot call abstract method AbsBase::DoSth()
Mein Frage, gibt es hierfuer ein anderes Konzept, um eine aehnliche Struktur zu implementieren? Oder kann mir einer sagen warum das Konzept niemals funktionieren kann (auch Java, C#, etc..) und welche Alternativen ich diesbezueglich habe?
Danke Sehr
Christopher