2010-08-13 23 views
20

i era wonderinf si me podría ayudar ..PHP - __construct extendida

Tengo dos clases, se extiende al otro .. Clase B se extenderá por varios objetos diferentes y se utiliza para las interacciones de bases de datos comunes .. Ahora me gustaría que la clase B maneje su conexión y se desconecte sin dirección de la clase A o cualquier entrada externa.

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

Gracias de antemano ..

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; 
    } 
} 

Respuesta

55

El padre __construct() método definido en la clase B se ejecutará automáticamente si una instancia de clase de un niño, a menos hay un método definido en la clase __construct() a.

class a extends b { 
} 

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

$x = new a(); 

Si se define un método __construct() en clase A, entonces esto anula el uso del método de __construct() en la clase b .... se ejecutará en lugar 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(); 

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

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(); 
+3

Gracias :) stackoverflow es tan bueno para tener y encontrar información relevante que puedes disfrutar de flujos de trabajo como "me gusta, lo sé, pero solo quiero asegurarme de que no me estoy encontrando con un pequeño rasgo de intuición de PHP en alguna parte" - gracias jaja! – lol

10

No estoy seguro de que entiendo totalmente lo que están pidiendo, pero se puede llamar a los padres construir método desde el constructor del niño

parent::__construct(); 

Esa es la única opción que yo sepa.

+0

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

3

llamada parent::__construct() en a::__construct():

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

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

se puede omitir el constructor de un conjunto si usted no está haciendo ninguna materia a-específica.

+0

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 ejecutar automáticamente. – Lee

+0

Ahh esta era la respuesta ... dejando al constructor fuera de la clase A , corrió la clase B! ¡Gracias! – Lee

Cuestiones relacionadas