Comunidad de diseño web y desarrollo en internet online

Problema al heredar: extends

Citar            
MensajeEscrito el 31 Jul 2011 08:15 pm
Hola. Intento crear una clase base para un mvc que quiero crear (pequeño desafio personal) y tengo un problema con estos ficheros.

Código PHP :

< ?php
abstract class ControllerBase {
 
    protected $view;
 
    function __construct()
    {
        $this->view = new View();
    }
}
?>

Esta clase debería poder cargar la funcionalidad para visualizar correctamente las vistas del sistema. Este es la clase que hereda.

Código PHP :

<?php
class index extends ControllerBase {
   public function index(){
      $this->view->show("index");
   }
}
?>

Sin embargo, me aparece lo siguiente:

Código :

Fatal error: Call to a member function show() on a non-object in ...

Me extraña bastante que no herede la funcionalidad de vistas.. sin embargo, si hago lo siguiente:

Código PHP :

function __construct(){
   parent::__construct();
}

Todo funciona correctamente. Tener que volver a llamar al padre es lo correcto? no hay una forma de que ya herede las propiedades del padre al hacer uso de extends??

Por Shainatao

15 de clabLevel



Genero:Masculino  

aprendiz de programador

firefox
Citar            
MensajeEscrito el 31 Jul 2011 08:58 pm
mira que las versiones de php 5.3 y anteriores hacer esto

Código PHP :

class index extends ControllerBase { 
   public function index(){ 
      $this->view->show("index"); 
   } 
}

es igual como si estuvises haciendo esto

Código PHP :

class index extends ControllerBase { 
   public function __construct(){ 
      $this->view->show("index"); 
   } 
}

osea estas sobreponiendo al constructor que heredo y por lo tanto lo que habia en el contructor padre no se ejecutara al menos que le hagas una llamada explicita

Código PHP :

class index extends ControllerBase { 
   public function index(){ 
      parent::__construct();
      $this->view->show("index"); 
   } 
}

o cambies el nombre donde pones el metodo index y lo renombras

Código PHP :

class index extends ControllerBase { 
   public function otro(){ 
      $this->view->show("index"); 
   } 
}

y veras que se ejecute ademas las clases abstractas solo deberian usarse en los casos en que quieras que la clase hija tenga metodos especificos y procesos del padre

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 31 Jul 2011 09:03 pm
muchas gracias!!
quedo clarísimo, ahora mismo lo pruebo =)

Por Shainatao

15 de clabLevel



Genero:Masculino  

aprendiz de programador

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.