2011-10-06 174 views
8

Solo me pregunto si es mejor definir un constructor vacío o dejar la definición del constructor completamente en PHP? Tengo la costumbre de definir constructores con solo return true;, incluso si no necesito que el constructor haga nada, solo por razones de finalización.PHP constructor vacío

Respuesta

10

Si no necesita un constructor, es mejor dejarlo sin necesidad de escribir más código. Cuando lo escribes, déjalo vacío ... regresar verdadero no tiene un propósito.

1

constructor siempre devuelve la instancia de la clase en la que está definida. Por lo tanto, nunca usas "return" dentro del constructor. Por último, es mejor no definirlo si no lo vas a usar.

+0

El valor de retorno del constructor se ignora por completo. – KingCrunch

+0

de hecho si encuentro a alguien que regresa dentro del constructor en primer lugar, nunca voy a fusionar su código con el mío. –

2

Solo debe definir un constructor vacío si su objeto nunca se debe crear una instancia. Si ese es el caso, haga que el __construct() sea privado.

5

EDIT:

respuesta anterior ya no es válida, a partir de PHP ahora se comporta igual que otros lenguajes de programación orientada a objetos. constructores no son parte de las interfaces. por lo tanto, ahora se permite a anularlos la forma que prefiera sin problemas de ningún tipo

la única excepción a esto es:

interface iTest 
{ 
    function __construct(A $a, B $b, Array $c); 
} 

class Test implements iTest 
{ 
    function __construct(A $a, B $b, Array $c){} 
    // in this case the constructor must be compatible with the one specified in the interface 
    // this is something that php allows but that should never be used 
    // in fact as i stated earlier, constructors must not be part of interfaces 
} 

ANTERIOR VIEJO NO-VÁLIDO-YA respuesta:

existe es una diferencia importante entre un constructor vacío y ningún constructor en absoluto

class A{} 

class B extends A{ 
    function __construct(ArrayObject $a, DOMDocument $b){} 
} 

VS 

class A{ 
    function __construct(){} 
} 
class B extends A{ 
    function __construct(ArrayObject $a, DOMDocument $b){} 
} 

// error B::__construct should be compatible with A constructor 
+0

No solo eso, pero si 'A' tenía un constructor definido y' B' tenía un constructor definido, vacío, entonces esencialmente eliminarías el constructor, pero si lo dejas por completo, entonces estás heredando el padre constructor. El resultado es que no debe incluir "siempre" o "nunca" un constructor vacío, y "siempre" no significa lo mismo cuando hace una u otra. Se trata de contexto. – Jason

3

Existe una diferencia entre los dos: si escribe una función __construct() vacía, sobrescribirá cualquier __construct() heredado de una clase principal.

De modo que si no lo necesita y no desea sobrescribir el constructor principal explícitamente, no lo escriba en absoluto.

Cuestiones relacionadas