lunes, 20 de octubre de 2014

PHP (07) POO (04) Constructores

Hasta ahora para introducir los datos de un objeto hemos tenido que hacerlo mediante la función set, pero esto aunque funciona no es lo más practico, existe un tipo de función en PHP llamada constructor, y que se define como __constructor(argumentos), con la cual se pueden introducir los datos del objeto a la hora de su declaración, tal y como vemos a continuación:
<?php
 class Person
 {
  var $nombre;
  var $edad;

  function __construct($nombre, $edad)
  {
   $this->nombre=$nombre;
   $this->edad=$edad;
  }

  //Aquí comienzan los geters y seters de las propiedades
  function set_nombre($dato)
  {
   $this->nombre = $dato;
  }
  
  function get_nombre()
  {
   return $this->nombre;
  }

  function set_edad($dato)
  {
   $this->edad = $dato;
  }
  
  function get_edad()
  {
   return $this->edad;
  }
 }
 $persona1 = new Person('Antonio', '23');

 echo '<p>Mostrando con $persona1->get_nombre: ' . $persona1->get_nombre() . '</p>';
 echo '<p>Mostrando con $persona1->get_edad: ' . $persona1->get_edad() . '</p>';
?>

En este script hemos introducido una nueva propiedad llamada $edad, y hemos introducido sus métodos get y set, además hemos puesto la función __construct que recibe como parámetros el nombre y la edad, y que introduce dentro del objeto estos parámetros a través de $this-> de este modo cuando hemos declarado el objeto con new, hemos puesto los datos. Al crearse el objeto, la clase activa el constructor e introduce los datos dándonos el objeto ya listo para trabajar, tal y como hacemos luego con los echos, obteniendo como resultado:
Mostrando con $persona1->get_nombre: Antonio
Mostrando con $persona1->get_edad: 23

De este modo se puede observar como el constructor nos ahorra código, y nos sirve para crear de forma automática los objetos. Aunque este debe de tener los atributos necesarios.

Otra forma de llamar al constructor es usando el mismo nombre de la clase, de este modo la clase lo identifica como el constructor, pero ambas formas obtienen idénticos resultados.
function Person($nombre, $edad)
  {
   $this->nombre=$nombre;
   $this->edad=$edad;
  }

No hay comentarios:

Publicar un comentario