2008-12-31 12 views
6

En mi búsqueda para tratar de aprender más sobre OOP en PHP. Me he encontrado con la función constructora unas cuantas veces y simplemente ya no puedo ignorarla. En mi entender, el constructor es invocado desde el momento en que creo un objeto, ¿es correcto?¿Beneficios de usar un constructor?

¿Pero por qué necesitaría crear este constructor si puedo usar funciones o métodos "normales" como se llaman?

aplausos, Keith

+0

También, ver http://stackoverflow.com/questions/403756/benefits-of-using-a-constructor que hace la misma pregunta – Adam

+1

ja, es gracioso. Esa es mi pregunta que me olvidé por completo. Estaba mirando las Preguntas relacionadas al hacer mi pregunta y no vi nada. Disculpas ya que no puedo eliminar esta pregunta ya que hay demasiadas respuestas. –

+0

2 años a la izquierda, nada chaged))) – zerkms

Respuesta

9

Si se llama al constructor cuando se crea el objeto.

Un pequeño ejemplo de la utilidad de un constructor es este

class Bar 
{ 
    // The variable we will be using within our class 
    var $val; 

    // This function is called when someone does $foo = new Bar(); 
    // But this constructor has also an $var within its definition, 
    // So you have to do $foo = new Bar("some data") 
    function __construct($var) 
    { 
     // Assign's the $var from the constructor to the $val variable 
     // we defined above 
     $this->val = $var 
    } 
} 

$foo = new Bar("baz"); 

echo $foo->val // baz 

// You can also do this to see everything defined within the class 
print_r($foo); 

ACTUALIZACIÓN: Una cuestión también se preguntó por qué esto debería ser utilizado, un ejemplo de la vida real es una clase de base de datos, donde se llama al objeto con el nombre de usuario, la contraseña y la tabla para conectarse, a los que se conectaría el constructor. Luego tiene las funciones para hacer todo el trabajo dentro de esa base de datos.

+0

Gracias por la respuesta Ólafur. Si es posible, ¿podría comentar cada línea para que la entienda mejor? K –

+0

Gracias por su explicación, pero no puede entender su ejemplo de la vida real, ¿puede por favor explicar más al respecto? gracias de antemano. – sradha

28

El constructor le permite asegurarse de que el objeto se pone en un estado particular antes de intentar usarlo. Por ejemplo, si su objeto tiene ciertas propiedades que se requieren para su uso, puede inicializarlas en el constructor. Además, los constructores permiten una forma eficiente de inicializar objetos.

6

La idea del constructor es preparar un conjunto inicial de datos para el objeto, por lo que puede comportarse de forma esperada.

Just call a method no es una oferta, porque puede olvidarse de hacer eso, y esto no se puede especificar como "requerido antes del trabajo" en la sintaxis, por lo que obtendrá objeto "roto".

+1

@Keith: Para citar Wikipedia (y normalmente no, pero está bien escrito en ese caso): "[Los constructores] tienen la tarea de inicializar los miembros de datos del objeto y de establecer la invariante de la clase, fallando si el invariante no es válido. Un constructor escrito correctamente dejará el objeto en un estado válido." – netcoder

+1

@netcoder: sí, miré allí inmediatamente después de escribir mi respuesta, para ponerme a prueba ;-) Dado que no hay una diferencia significativa y dado que SO es un sitio donde ** la gente responde ** (no solo copiar y pegar) - Dejaré el mío, aunque esté escrito con un inglés peor ;-) – zerkms

2

Los constructores son buenos para una variedad de cosas. Inicializan variables en tu clase. Supongamos que está creando una clase de cuenta bancaria. $ b = nueva cuenta bancaria (60); tiene un constructor que da a la cuenta bancaria un valor inicial. Establecen básicamente variables dentro de la clase o también pueden inicializar otras clases (herencia).

2

El constructor es para la inicialización realizada cuando se crea un objeto.

No querrá llamar a un método arbitrario en un objeto recién creado porque va en contra de la idea de encapsulación, y requeriría que el código con este objeto tenga conocimiento inherente de su funcionamiento interno (y requiera más esfuerzo).

+1

llamando a un método setter, por ejemplo, una vez que el objeto ha sido creado no viole la encapsulación. El constructor se usa para definir propiedades/argumentos que son requeridos por el objeto para comportarse como se espera. – netcoder

+0

@netcoder Cierto, pero si el constructor involucrado, digamos, conectándose a una base de datos, no necesariamente esperaría que el código de llamada tuviera que llamar a un método para hacer esto, como podría ni siquiera quiere que el código de llamada sepa de dónde obtiene su información el objeto. Buen punto, sin embargo – Adam

Cuestiones relacionadas