Saltar la navegación

1.5.- Herencia.

Imagen de un diagrama de clases, la clase producto arriba, abajo a la izquierda la clase TV y abajo a la derecha la clase PC, de las clases inferores sale un flecla hacia la clase producto.
Captura de pantalla BlueJ (Elaboración Propia)

La herencia es un mecanismo de la POO que nos permite definir nuevas clases en base a otra ya existente. Las nuevas clases que heredan también se conocen con el nombre de subclases. La clase de la que heredan se llama clase base o superclase.

Por ejemplo, en nuestra tienda web vamos a tener productos de distintos tipos. En principio hemos creado para manejarlos una clase llamada Producto, con algunos atributos y un método que genera una salida personalizada en formato HTML del código.

class Producto {
    public $codigo;
    public $nombre;
    public $nombre_corto;
    public $pvp;
    public function muestra() {
        echo "<p>" . $this->codigo . "</p>";
    }
}

Esta clase es muy útil si la única información que tenemos de los distintos productos es la que se muestra arriba. Pero, si quieres personalizar la información que vas a tratar de cada tipo de producto (y almacenar, por ejemplo para los televisores, las pulgadas que tienen o su tecnología de fabricación), puedes crear nuevas clases que hereden de Producto. Por ejemplo, TV, PC, Movil.

class TV extends Producto {
    public $pulgadas;
    public $tecnologia;
}

Como puedes ver, para definir una clase que herede de otra, simplemente tienes que utilizar la palabra extends indicando la superclase. Los nuevos objetos que se instancien a partir de la subclase son también objetos de la clase base; se puede comprobar utilizando el operador instanceof().

$t = new TV();
if ($t instanceof Producto) {
     // Este código se ejecuta pues la condición es cierta.
    . . .
}

Antes viste algunas funciones útiles para programar utilizando objetos y clases. Las de la siguiente tabla están además relacionadas con la herencia.

Funciones de utilidad en la herencia en PHP
Función Ejemplo Significado
get_parent_class() echo get_parent_class($t); Devuelve el nombre de la clase padre del objeto o la clase que se indica.
is_subclass_of() if(is_subclass_of($t,'Producto') Devuelve true si el objeto o la clase del primer parámetro, tiene como clase base a la que se indica en el segundo parámetro, o false en caso contrario.