2009-06-29 8 views
6

Ich habe Eltern und Kind-Klassen wie folgt:Zugriff Muttereigenschaften und überschriebenen Methoden in PHP

abstract class ParentObj { 
    private $data; 
    public function __construct(){ 
     $this->data = array(1,2,3); 
     var_dump($this->data); 

     $this->method(); 
    } 
    public function method(){ 
     echo "ParentObj::method()"; 
    } 
} 
class ChildObj extends ParentObj { 
    public function __construct(){ 
     parent::__construct(); 
     var_dump($this->data); 
    } 
    public function method(){ 
     echo "ChildObj::method()"; 
    } 
} 

Die erwartete Ausgabe:

array(1,2,3) 
ChildObj::method() 
array(1,2,3) 

Der tatsächliche Ausgang:

array(1,2,3) 
ParentObj::method() 
NULL 

Die Das Problem besteht darin, dass das untergeordnete Objekt nicht auf die Dateneigenschaft zugreifen kann und dass das übergeordnete Objekt die überschriebene Methode in chil nicht aufruft d.

Mache ich etwas falsch oder hat jemand irgendwelche Ideen?

EDIT: Ich möchte klarstellen, dass ich ein ChildObj bin Instanziierung als $child = new ChildObj()

+0

Okay, das Ändern des privaten in den geschützten Bereich behebt den Zugriff auf die Eigenschaft. –

Antwort

0

Ok, das Problem war, dass die Methoden tatsächlich als privat deklariert wurden, nicht öffentlich wie in meinem Post, wodurch das gleiche Symptom wie die $ data-Eigenschaft erlitt.

10

Sie haben data als privat deklariert, so ChildObj wird es nicht möglich sein, den Zugriff - Sie müssen es stattdessen geschützt zu machen:

protected $data; 

Meine PHP (5.2.8) druckt ChildObj::method() - sind Sie eine ältere Version?

+0

Ich benutze PHP 5.2.5 –

Verwandte Themen