09. Interfaces y herencia múltiple con PHP

Como dijimos en anteriores capítulos, PHP no tiene la capacidad de hacer herencia múltiple. Para resolver el problema de la herencia múltiple, PHP utiliza las interfaces, que como vimos en capítulos anteriores, son un conjunto de métodos característicos de diversas clases, independientemente de la relación que dichas clases mantengan entre sí, por lo que una misma clase puede implementar múltiples interfaces.

Las interfaces se definen utilizando la palabra clave interface, y se pueden emplear utilizando la palabra clave implements.

Las interfaces, aunque no son clases, en PHP son interpretadas como tal.

Características de las interfaces

Como vimos en capítulos anteriores, a modo de recordatorio:

  • No pueden tener el mismo nombre que una clase.
  • No pueden instanciarse porque no tienen referencias asociadas a objetos.
  • No se pueden definir propiedades, sólo van a tener métodos.
  • Los métodos de una interfaz deben ser públicos, sólo estar definidos y no tener cuerpo.
  • Las clases que implementan una interfaz deben utilizar todos los métodos de la misma.
  • Diferentes interfaces no pueden tener nombres de métodos idénticos si son implementadas por una misma clase.

Ejm

<?php
interface Ingredientes {
    public function establecer_ingredientes($lista);
    public function obtener_ingredientes();
}

interface Receta {
    public function establecer_receta($pasos);
    public function obtener_receta();
}

class Postre implements Ingredientes, Receta {
    private $ingredientes;
    private $recetas;

    public function establecer_ingredientes($lista){
        $this->ingredientes = explode(',', $lista);
    }

    public function obtener_ingredientes(){
        $num_ingredientes = count($this->ingredientes);
        $html = '<ul>';
        for ($i=0; $i < $num_ingredientes; $i++) {
            $html .= '<li>' . $this->ingredientes[$i] . '</li>';
        }
        $html .= '</ul>';
        return print($html);
    }

    public function establecer_receta($pasos){
        $this->receta = explode("|", $pasos);
    }

    public function obtener_receta(){
        $num_pasos = count($this->receta);
        $html = '<ol>';
        for ($i=0; $i < $num_pasos; $i++) {
            $html .= '<li>' . $this->receta[$i] . '</li>';
        }
        $html .= '</ol>';
        return print($html);
    }
}

$bizcocho = new Postre();
echo "<h1>Postres</h1>";
echo "<h2>Bizcocho</h2>";

echo "<h3>Ingredientes</h3>";
$bizcocho->establecer_ingredientes('
1 vaso de harina,
1 huevo,
1/3 vaso de leche,
3 cucharadas mantequilla
');
$bizcocho->obtener_ingredientes();

echo "<h3>Receta</h3>";
$bizcocho->establecer_receta('
    Mezclar todos los ingredientes exceptuando la mantequilla
    en un recipiente hasta tener una masa espesa y uniforme|
    Calentar 1 cucharada de mantequilla a fuego lento en una
    sartén|
    Cuando se derrita la mantequilla, verter la mezcla|
    Dejar calentar la mezcla hasta que salgan burbujas|
    Cuando la consistencia se vea esponjosa dar la vuelta
');
$bizcocho->obtener_receta();
?>
Scroll al inicio