2009-06-29 17 views
6

devo classi padre e figlio come segue:Accesso alle proprietà controllanti e metodi di override 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()"; 
    } 
} 

Il risultato atteso:

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

L'uscita effettiva:

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

Il il problema è che l'oggetto figlio non può accedere alla proprietà data e il genitore si rifiuta di chiamare il metodo sottoposto a override nel chil d.

Sto facendo qualcosa di sbagliato o qualcuno ha qualche idea?

EDIT: Devo chiarire che sto un'istanza di un ChildObj come $child = new ChildObj()

+0

OK, la modifica delle correzioni private a protette l'accesso alla proprietà. –

risposta

0

Ok, il problema era che i metodi erano effettivamente dichiarati privati, non pubblici come nel mio post, quindi soffrono dello stesso sintomo della proprietà $ data.

10

Hai dichiarato data come private, in modo da ChildObj non sarà in grado di accedervi - è necessario per rendere più protetto, invece:

protected $data; 

mio PHP (5.2.8) stampa ChildObj::method() - Stai usando una versione precedente?

+0

Sto usando PHP 5.2.5 –

Problemi correlati