Hallo,
ich möchte aus meiner abstrakten Superklasse auf eine statische Methode in der konkreten Klasse zugreifen, von der ich weis, dass sie existiert.
Der Typ der konkreten Klasse soll egal sein.
Mein 1. Versuch:
Mittels abstrakter Funktion in Superklasse.
Fatal error: Cannot call abstract method Old::konkreteLogik() in ...
Mein 2. Versuch:
Mittels Interface. (In Java sind die konkreten Klassen über den Typ des Interfaces ansprechbar.)
Fatal error: Cannot call abstract method iNeu::konkreteLogik() in ...
Zur Zeit behelfe ich mir mit der Ermittlung des Typs der konkreten Klasse und der PHP-Funktion call_user_func().
Bsp:
Das ist m.E. unsauber.
Das Problem muss mit den Methoden der OOP zu lösen sein.
Any Ideas ?
Sebastian
ich möchte aus meiner abstrakten Superklasse auf eine statische Methode in der konkreten Klasse zugreifen, von der ich weis, dass sie existiert.
Der Typ der konkreten Klasse soll egal sein.
Mein 1. Versuch:
Mittels abstrakter Funktion in Superklasse.
PHP-Code:
abstract class Old
{
abstract protected static function konkreteLogik();
final public function show(){
self::konkreteLogik();
}
}
class Neu extends Old
{
protected static function konkreteLogik()
{
echo "konkrete Logik";
}
}
$instanz = new Neu();
$instanz->show();
Mein 2. Versuch:
Mittels Interface. (In Java sind die konkreten Klassen über den Typ des Interfaces ansprechbar.)
PHP-Code:
abstract class Old
{
final public function show(){
iNeu::konkreteLogik();
}
}
interface iNeu
{
protected static function konkreteLogik();
}
class Neu extends Old implements iNeu
{
protected static function konkreteLogik()
{
echo "konkrete Logik";
}
}
$instanz = new Neu();
$instanz->show();
Zur Zeit behelfe ich mir mit der Ermittlung des Typs der konkreten Klasse und der PHP-Funktion call_user_func().
Bsp:
PHP-Code:
abstract class Old
{
abstract protected static function konkreteLogik();
final public function show(){
call_user_func( array (get_class($this), 'konkreteLogik'));
}
}
Das Problem muss mit den Methoden der OOP zu lösen sein.
Any Ideas ?
Sebastian
Kommentar