2010-08-12 15 views
11

Recientemente he iniciado php y me preguntaba las diferencias entre __construct() y tener un método con el mismo nombre que la clase?__construct() vs método con el mismo nombre que la clase

¿Hay alguna razón para usarlo? Todo lo que puedo averiguar es que anula el método llamado Foo o ¿es el que prefieres?

E.g.

class Foo { 

    function Foo() 
    { 
     echo 'Foo stated<br>'; 
    } 

    function __construct() { 
     echo 'Construct started<br>'; 
    } 
} 

Gracias

+0

Posible duplicado de [\ _ \ _construment() vs SameAsClassName() para el constructor en PHP] (http://stackoverflow.com/questions/217618/construct-vs-sameasclassname-for-constructor-in-php) – nawfal

Respuesta

3

Foo() es una forma php4 (en desuso), __construct() es la manera PHP5. php primero buscará __construct, luego, si no se encuentra, usará Foo

+0

Muchas gracias. – Joe

7

"si PHP 5 no puede encontrar una función __construct() para una clase dada, buscará la función de constructor de estilo antiguo, por el nombre de la clase. Efectivamente, significa que el único caso que tendría problemas de compatibilidad es si la clase tenía un método llamado __construct() que se usó para semántica diferente.

Fuente:http://www.php.net/manual/en/language.oop5.decon.php

8

Usando __construct() es el más nuevo método PHP5 OOP más enfocado a llamar a un constructor. Usar un método con el mismo nombre que la clase es la vieja forma obsoleta de hacerlo, y no funcionará como un constructor a partir de PHP 5.3.3 para las clases de espacio de nombres.

De the constructors and destructors page:

Para compatibilidad hacia atrás, si PHP 5 no puede encontrar una función __construct() para una clase dada, se buscará la función constructora de estilo antiguo, con el nombre de la clase. Efectivamente, significa que el único caso que tendría problemas de compatibilidad es si la clase tenía un método llamado __construct() que se usó para semántica diferente.

A diferencia de otros métodos, PHP no generará un mensaje de error de nivel E_STRICT cuando __construct() se anula con parámetros diferentes a los que tiene el método padre __construct().

A partir de PHP 5.3.3, los métodos con el mismo nombre que el último elemento de un nombre de clase con nombre de espacio ya no serán tratados como constructores. Este cambio no afecta a las clases sin nombre de espacio.

0

Tener un método con el mismo nombre que la clase, que se llama automáticamente como un constructor es un retroceso a PHP4, y ha de considerarse obsoleta ... en la última rama de desarrollo de PHP, lo hará ser tratado como un método de clase normal. __construct es el constructor formalmente aceptado en PHP5, aunque en las versiones actuales recurrirá al método PHP4 si __construct no existe.

3

¿Hay alguna razón para usarlo? Todo lo que I puede resolver es que anula el método llamado Foo o ¿está en el que prefiera?

Las ventajas de __construct() se vuelven más claras cuando implica el cambio de nombre y la herencia. Si cambias el nombre de una clase, debes cambiarle el nombre a su constructor.No es gran cosa, pero si la clase B hereda de la clase A que podría terminar con:

class B extends A { 
    function B() { 
     parent::A(); 
    } 
} 

Es mucho más fácil y más fácil de mantener que hacer:

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

Ahora, cuando se cambia el nombre de la clase A, Don No olvide recordar también cambiar las llamadas principales en todos sus hijos. De acuerdo, aún hay un cambio de nombre en tu código, pero al menos este no es uno de ellos.

Cuestiones relacionadas