jueves, 23 de octubre de 2014

PHP (07) POO (06) Herencias (03) Constructores y herencias

Como ya hemos visto, la forma ideal de crear un objeto es a través de un constructor, pero con lo que hemos visto hasta ahora no podemos crearlo desde una clase heredada, aunque la solución es muy sencilla, para ello la clase padre debe de tener su propio constructor, por lo que he añadido el siguiente método a nuestro ejemplo (en definitiva es el mismo que de si de una clase independiente se tratara):
function __construct($nombre, $edad)
{
 $this->nombre=$nombre;
 $this->edad=$edad;
}


Una vez que tenemos el constructor en la clase padre hay que hacer que la clase heredada pueda acceder a ella, de modo que introducimos el siguiente método constructor:
function __construct($nombre, $edad, $ciudad)
{
 parent::__construct($nombre, $edad);
 $this->ciudad=$ciudad;
}

Aquí vemos que el constructor de la clase heredada tiene tres argumentos, los dos que va a necesitar para el padre y el que requiere ella misma.
A continuación se utiliza la instrucción:
parent::__construct($nombre, $edad);

que accede al constructor del padre, enviando los dos argumentos que necesita, y finalmente añade al objeto la propiedad de la clase propiamente dicha, creando de este modo el objeto de forma natural.

En el siguiente ejemplo se ve como funciona todo el script de forma sencilla y practica:
<?php
 class Person
 {
  var $nombre;
  var $edad;

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

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

 class Ciudad extends Person
 {
  var $ciudad;

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

  function set_ciudad($dato)
  {
   $this->ciudad = $dato;
  }
  
  function get_ciudad()
  {
   return $this->ciudad;
  }

  function set_nombre_publico($dato)
  {
   $this->set_nombre($dato);
  }

 }

 $persona1 = new Ciudad('Angel', '24', 'Cordoba');

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

Como se puede ver, la creación del objeto se hace igual que siempre; el nombre del objeto, new, la clase a la que pertenece, y todos los argumentos que necesita para su creación.
De este modo obtenemos el siguiente resultado:
Mostrando nombre con $persona1->get_nombre: Angel
Mostrando edad con $persona1->get_edad: 24
Mostrando ciudad con $persona1->get_ciudad: Cordoba

No hay comentarios:

Publicar un comentario