2009-06-29 10 views
6

tengo clases primarias y secundarias de la siguiente manera:acceder a las propiedades de los padres y los métodos sobrescritos en 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()"; 
    } 
} 

El resultado esperado:

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

La salida real:

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

El El problema es que el objeto hijo no puede acceder a la propiedad de datos y el padre se niega a llamar al método reemplazado en el archivo chil re.

¿Estoy haciendo algo mal, o alguien tiene alguna idea?

EDIT: Debo aclarar que estoy instancias de un ChildObj como $child = new ChildObj()

+0

De acuerdo, cambiando las correcciones privadas a las protegidas, el acceso a la propiedad. –

Respuesta

0

Bien, el problema fue que los métodos fueron declarados como privados, no públicos como en mi publicación, sufriendo el mismo síntoma que la propiedad $ data.

10

Usted ha declarado data como privado, por lo ChildObj no será capaz de acceder a él - que necesita para que sea protegida en su lugar:

protected $data; 

Mi PHP (5.2.8) imprime ChildObj::method() - ¿está ejecutando una versión anterior?

+0

Estoy usando PHP 5.2.5 –

Cuestiones relacionadas