2010-11-07 13 views
6

Hola, tengo una pregunta con respecto a $ this.clases de PHP extienden

class foo { 

    function __construct(){ 

     $this->foo = 'bar'; 

    } 

} 

class bar extends foo { 

    function __construct() { 

     $this->bar = $this->foo; 

    } 

} 

haría

$ob = new foo(); 
$ob = new bar(); 
echo $ob->bar; 

resultado en bar ??

Solo pregunto debido a que pensé que sería, pero aparte de mi secuencia de comandos no parece dar lugar a lo que pensaba.

Respuesta

10

citar el PHP manual:

Nota: constructores padres no son llamados implícitamente si la clase hijo define un constructor. Para ejecutar un constructor padre, se requiere una llamada a parent :: __ construct() dentro del constructor hijo.

Esto significa que en tu ejemplo, cuando el constructor de bar carreras, no se ejecuta el constructor de foo, por lo $this->foo sigue siendo indefinido.

5

PHP es un poco extraño en que un parent constructor is not automatically called if you define a child constructor - debe llamarlo usted mismo. Por lo tanto, para obtener el comportamiento que desea, haga esto

class bar extends foo { 

    function __construct() { 

     parent::__construct(); 
     $this->bar = $this->foo; 

    } 

} 
+0

Un poco extraño, pero muy flexible, ya que fácilmente no se puede sobrecargar en absoluto (sólo llamará a los padres) , sobrecargue parcialmente el constructor (llamándolo desde el nuevo) o sobrecargue completamente (sin llamarlo en absoluto). Entonces, si bien es extraño en comparación con otros idiomas, eso no significa que sea extraño que lo haga (se puede ver como un gran beneficio) ... – ircmaxell

+0

¿Entonces, esto no tiene ningún significado una vez que se llama a la clase extendida? Pensé que esto llevaría consigo sus objetos. –

+0

No, $ esto continúa haciendo referencia a la instancia actual –

0

No crea una instancia de foo y barra. Crea una instancia única de barra.

$ob = new bar(); 
echo $ob->bar; 

y otras respuestas han señalado, llamada parent :: __ construct() dentro de su constructor barra

Cuestiones relacionadas