PHP orientado a objetos 5: herencia II

Segunda parte de la entrada dedicada a la herencia en PHP.

hiroshige

archivado en: PHP/AJAX / 17 marzo, 2013 / taller:

Seguimos con la serie de PHP orientado a objetos. En la entrada anterior vimos cómo una clase puede heredar los métodos y propiedades de otra mediante la palabra clave extends y, además, aprendimos a reescribir los métodos y propiedades de la clase padre, que es algo tan sencillo como redefinirlos en la clase hija.

class ClasePadre

{

protected $propiedad ="soy un gato";

public function metodo() {

return $this->propiedad;

}

}

class ClaseHija extends ClasePadre

{

protected $propiedad ="soy un ratón";

}

$mi_ClasePadre = new ClasePadre();

echo $mi_ClasePadre->metodo();

// Esto da como resultado: "soy un gato"

$mi_ClaseHija = new ClaseHija();

echo $mi_ClaseHija->metodo();

// Esto da como resultado: "soy un ratón"

En la entrada anterior utilicé como ejemplo una calculadora en la que la clase padre sumaba y la hija restaba.

class operacion

{

protected $numero1;

protected $numero2;

public function __construct($numero1, $numero2) {

$this->numero1 = $numero1;

$this->numero2 = $numero2;

}

public function operacion() {

return $this->numero1 + $this->numero2;

}

}

class resta extends operacion

{

public function operacion() {

return $this->numero1 - $this->numero2;

}

}

Pero ahora imaginemos que necesitamos que la clase hija también sea capaz de sumar, es decir, de ejecutar las instrucciones que había en un método original de la clase padre que ha sido redefinido. Para eso podemos usar el operador Paamayim Nekudotayim, cuyo nombre más prosaico es operador de resolución de alcance aka dos puntos dobles para los amigos. Combinado con la palabra parent, este operador nos permite recuperar los métodos de la clase padre.

Así, por ejemplo, si necesitáramos en el caso anterior que  la clase hija también fuera capaz de sumar, que era el método operacion de la clase padre, podríamos escribir algo así:

public function operacion2() {

return parent::operacion();

}

Y ahora ya podríamos utilizar el método original para lo que sea...

$mi_Resta = new resta (4, 3);

// esto da 1

echo $mi_Resta->operacion();

// esto da 7

echo $mi_Resta->operacion2();

Herencia múltiple

Un detalle más antes de terminar esta entrada. En PHP, una clase puede ser heredera de una clase que ya es una extensión de otra (aunque no es saludable que el árbol vaya más allá de unos 7 niveles); y, por supuesto, una misma clase puede ser heredada por varias. Sin embargo, no es posible que una clase sea heredera de otras dos, lo cual es objeto de discusión entre los especialistas sobre si es una faena o una virtud (ver discusión en foros del web, sobre todo los post de Enrique Place, que es un crack).

 

herenciamultiple

Es decir, B puede ser una clase hija de A y, a su vez, ser la clase padre de C. Dos clases, como B y C pueden ser herederas de A. Pero C no puede ser heredera de A y B. Y por hoy vamos a dejarlo aquí.

¡No me lo puedo creer!

Me ha quedado un post de solo 476 palabras.

Yeah!, what machine ^^.

|| Tags: ,

valoración de los lectores sobre PHP orientado a objetos 5: herencia II

  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • 4.9 sobre 5 (15 votos)

¿Te ha parecido útil o interesante esta entrada?
dormido, valoración 1 nadapensativo, valoración 2 un poco sonrisa, valoración 3 a medias guiño, valoración 4 bastante aplauso, valoración 5 mucho

Tú opinión es muy importante, gracias por compartirla!

Los comentarios están cerrados.