miércoles, 22 de octubre de 2014

PHP (07) POO (06) Herencias (01) Cómo hacer una clase que herede

Hasta ahora hemos visto objetos que dependen de una sola clase, pero puede darse el caso de que necesitemos que objetos del mismo tipo dependan de diferentes clases, donde lo objetos tengan propiedades iguales y diferentes.
Siguiendo con nuestro ejemplo, supongamos que cada persona que creemos vive en una ciudad, aunque es cierto que la ciudad podría ser una propiedad de nuestro objeto persona, vamos a suponer que queremos que herede de este, es decir, que utilice los métodos de Person y los suyos propios. Para ello tan solo hace falta escribir una nueva clase de la misma forma pero a continuación debemos de poner la palabra reservada extends y la clase de la que hereda:
class Ciudad extends Person
 {
  ...
 }


Una vez que tenemos la nueva clase, tan solo hay que introducir las propiedades y los métodos set y get:
class Ciudad extends Person
 {
  var $ciudad;

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

 }

Una vez que tenemos esto ya podemos crear nuestro objeto, desde Ciudad que nos permite usar todos los métodos, tal y como vemos aquí:
<?php
 class Person
 {
  var $nombre;
  var $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;
  }
 }

 class Ciudad extends Person
 {
  var $ciudad;

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

 }

 $persona1 = new Ciudad;
 $persona1->set_nombre('Antonio');
 $persona1->set_edad('23');
 $persona1->set_ciudad('Zaragoza');

 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>';
?>

Y que nos da como resultado:
Mostrando nombre con $persona1->get_nombre: Antonio
Mostrando edad con $persona1->get_edad: 23
Mostrando ciudad con $persona1->get_ciudad: Zaragoza

De este modo es como funciona la herencia, la clase que hereda puede utilizar todos los métodos de la clase "padre", siempre que estos sean publicos, ya que los privados no se heredarán.
Como sabemos los accesos publicos están disponibles a todo el código, pero...¿cómo podemos poner un método o propiedad de forma que se herede y que no permita el acceso de todo el código?...
Utilizando el acceso protegido...
 

No hay comentarios:

Publicar un comentario