PHP – __construcción extendida

3 minutos de lectura

avatar de usuario
Sotavento

me preguntaba si me podrias ayudar..

Tengo dos clases, una extiende a la otra. La clase B se extenderá con varios objetos diferentes y se usará para interacciones comunes de bases de datos. Ahora me gustaría que la clase B maneje su conexión y desconexión sin la dirección de la clase A o cualquier entrada externa. .

El problema por lo que entiendo es que una clase extendida no ejecutará automáticamente su función __construct. ¿Hay alguna forma de evitar esto?

Gracias por adelantado..

class a extends b
{
   public function __construct()
   {
   }   

   public function validateStuff()
   {
      $this->insert_record();
   }
}

class b
{
   public function __construct()
   {
      $this->connect();
   }

   protected function connect()
   {
      return true;
   }

   public function insert_record()
   {
      return true;
   }
}

El padre __construct() El método definido en la clase b se ejecutará automáticamente si crea una instancia de la clase secundaria a, a no ser que hay un __construct() método definido en la clase a.

class a extends b { 
} 

class b { 
   public function __construct() 
   { 
      echo 'In B Constructor'; 
   } 
} 

$x = new a();

si un __construct() se define en la clase a, entonces esto anula el uso de la __construct() método en la clase b …. se ejecutará en vez de la clase b __construct() método

class a extends b { 
   public function __construct() 
   { 
      echo 'In A Constructor'; 
   } 
} 

class b { 
   public function __construct() 
   { 
      echo 'In B Constructor'; 
   } 
} 

$x = new a();

Entonces, si la clase de su hijo tiene un __construct() método definido, entonces necesita llamar explícitamente al constructor para el padre si desea ejecutar eso también.

class a extends b { 
   public function __construct() 
   { 
      parent::__construct();
      echo 'In A Constructor'; 
   } 
} 

class b { 
   public function __construct() 
   { 
      echo 'In B Constructor'; 
   } 
} 

$x = new a();

  • Gracias :): stackoverflow es tan bueno para tener y encontrar información relevante que puede disfrutar de flujos de trabajo como “lo sé, pero solo quiero asegurarme de que no me estoy encontrando con una pequeña peculiaridad de la intuición de PHP en alguna parte” – gracias ¡ja ja!

    – jajaja

    7 mayo 2013 a las 13:43

No estoy seguro de entender completamente lo que está preguntando, pero puede llamar al método de construcción de los padres desde el constructor del niño

parent::__construct();

Esa es la única opción que conozco.

  • No quería llamar al constructor en absoluto desde la clase a. Esperaba encontrar un método para aplicar el constructor de la clase b para que se ejecutara automáticamente.

    – Lee

    13 de agosto de 2010 a las 13:43

Llamar parent::__construct() en a::__construct():

class a extends b
{
   public function __construct()
   {
       parent::__construct();
   }   

   public function validateStuff()
   {
      $this->insert_record();
   }
}

Puede omitir el constructor de a por completo si no está haciendo nada específico.

  • No quería llamar al constructor en absoluto desde la clase a. Esperaba encontrar un método para aplicar el constructor de la clase b para que se ejecutara automáticamente.

    – Lee

    13 de agosto de 2010 a las 13:43

  • Ahh, esta fue la respuesta … ¡al dejar al constructor fuera de la clase A, la clase B se corrió! ¡Gracias!

    – Lee

    13 de agosto de 2010 a las 13:51

¿Ha sido útil esta solución?