aus Elternklasse auf statische Methode in abgeleiteter Klasse zugreifen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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.

    Comment

    Working...
    X