domingo, 26 de octubre de 2014

PHP (07) POO (06) Herencias (05) Sobreescribir métodos

Por sobreescribir métodos se considera que desde una clase heredada, se define un método que se llama igual que otro de la clase padre, de este modo cuando lo invocamos desde un objeto al que llamamos, es al de la clase hijo, haciendo que se ejecute ese código.
En el siguiente ejemplo puede verse claramente:
<?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 get_nombre(){
   $this->nombre = strtoupper($this->nombre);
   return $this->nombre;
  }


 }

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

Se ha introducido un función llamada get_nombre() en el hijo, de modo que cuando la llamamos es esta la que se ejecuta, en la cual para diferenciarla de la que se encuentra en el padre hemos transformado el string en mayúsculas, obteniendo como 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