dedlfix: Klassen/Funktionen Vererben

Beitrag lesen

Tach!

ich möchte gern den Konstruktor der Mutterklasse, an die Kindklasse übergeben.
Das funktioniert soviel ich weiß mit:
parent::__construct();

Aufrufen wäre das passende Verb gewesen.

Dann müssten doch eigentlich, alle Variablen, auch in der Kindklasse verfügbar sein oder nicht?

Das sind sie auch ohne Aufruf. Nur ihre im Parent-Konstruktor gesetzten Werte nicht.

Beispiel:

class Mutter

{
    public $bar = NULL;

public function __construct($bar){
        $this->bar = $bar;
    }

public function foo(){
        $data = Kind::foo1();
        return $data;
    }
}

class Kind extends Mutter
{
    public function __construct(){
        parent::__construct();
    }

public static function foo1(){
        // Fehler
        $new = self::$bar;
    }
}


> Warum funktioniert das so nicht?  
  
Es gibt doch eine schöne Fehlermeldung. Zum einen hast du für den Parameter des Parent-Konstruktors nichts übergeben. Dann hast du nicht gesagt, was du wie aufrufst. Wenn man $kind->foo() aufruft, bekommt man "Access to undeclared static property: Kind::$bar". Und da hat PHP Recht. Du rufst da eine Kind-Methode statisch auf und in diesem statischen Kontext gibt es keine statische Eigenschaft. Es gibt $bar, aber das ist an eine konkrete Instanz gebunden.  
  
Du müsstest da vermutlich mal dein Konzept überdenken und dir zurechtlegen, wann du etwas statisch machst und aus welchem Grund und wann du Instanzen verwendest.  
  
  
dedlfix.