aus Elternklasse auf statische Methode in abgeleiteter Klasse zugreifen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • aus Elternklasse auf statische Methode in abgeleiteter Klasse zugreifen

    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.

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

    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(); 
    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:
    PHP-Code:
     abstract class Old
     
    {
          abstract protected static function 
    konkreteLogik();
          
          final public function 
    show(){
             
    call_user_func( array (get_class($this), 'konkreteLogik'));
         }
     } 
    Das ist m.E. unsauber.
    Das Problem muss mit den Methoden der OOP zu lösen sein.

    Any Ideas ?

    Sebastian

  • #2
    hat sich erledigt.

    danke an mark hoffmann !!!

    PHP-Code:
    abstract class Old
     
    {
          abstract protected static function 
    konkreteLogik();
          
          final public function 
    show(){
             
    $this->konkreteLogik();
         }
     }


     class 
    Neu extends Old
     
    {
          protected static function 
    konkreteLogik()
          {
             echo 
    "konkrete Logik";
         }
     }
     
     
    $instanz = new Neu();
     
    $instanz->show(); 
    statische methoden können im objekt also auch mit $this->method_name() erreicht werden.

    Kommentar

    Lädt...
    X