2012-03-25 9 views
2

ich eine Handler-Klasse haben, die wie folgt aussieht:php Mutter Funktion aufrufen macht Eltern nicht in der Lage eigene Vars zu laden

class Handler{ 
    public $group; 

    public function __construct(){ 
     $this->group = $this->database->mysql_fetch_data("blabla query"); 
     //if i print_r($this->group) here it gives proper result 

     new ChildClass(); 
    } 

    public function userGroup(){ 
     print_r($this->group); //this is empty 
        return $this->group; 
    } 
} 

class ChildClass extends Handler{ 

    public function __construct(){ 
     $this->userGroup(); 
     //i tried this too 
     parent::userGroup(); 
     //userGroup from parent always returns empty 
    } 

} 

Workflow:

  • Handler aus meiner index.php aufgerufen wird und die __construct genannt wird

  • braucht Handler $ Gruppe erstellen

  • Handler schafft Kind Klasse

  • Child-Klasse ruft Handler Funktion

  • Wenn ich versuche $ Gruppe in der Funktion zurückzukehren Es wird versucht von Child $ this-> Gruppe zu erhalten, anstatt Handler

Immer wenn ich versuche, den Eltern etwas zu fragen, kann ich nur auf die Elternfunktion zugreifen, dann innerhalb der Funktion kann die Elternklasse keine eigenen Variablen finden

EDIT:

Ich dachte, mit "erweitert" wäre nützlich beim Aufrufen von Elternfunktionen, aber es scheint einfach $ an das Kind weiterzugeben wird einfacher sein.

Antwort

2

Sie haben den übergeordneten Konstruktor nie aufgerufen, daher wird das Gruppenobjekt nie initialisiert. Sie werden so etwas tun wollen.

class Handler{ 
    public $group; 

    public function __construct(){ 
     $this->group = $this->database->mysql_fetch_data("blabla query"); 
     //if i print_r($this->group) here it gives proper result 

     new ChildClass(); 
    } 

    public function userGroup(){ 
     print_r($this->group); //this is empty 
        return $this->group; 
    } 
} 

class ChildClass extends Handler{ 

    public function __construct(){ 
     parent::__construct(); 
     $this->userGroup(); 
    } 

} 

Wenn Sie nicht die __construct Methode in der erweiterten Klasse überschrieben hatte, dann würde die Eltern __construct automatisch aufgerufen worden, aber da Sie es in der erweiterten Klasse überschrieben, müssen Sie es sagen, die Eltern zu nennen __construct in Ihrer erweiterten Klasse '__construct.

+0

Oder vielleicht will er 'public $ group' statisch sein und eigentlich nicht zwei verschiedene Objekte haben. : p – Basti

+0

@Basti, wie auch immer, er muss das obige tun, und da er nicht erwähnt, worüber du redest, bin ich mir nicht sicher, warum du es erwähnst. – dqhendricks

+0

Wenn ich dies tue ruft das Elternteil das Kind wieder an und es gibt eine endlose Schleife – MakuraYami