24. Interfaces en PHP

A veces es necesario que un equipo de varias personas trabajen juntas, en este caso se hace imprescindible definir unas pautas generales de trabajo para que el resultado final sea el esperado. Si el desarrollo consiste en programar varios objetos, el analista de la aplicación puede definir la estructura básica en papel o crear una pequeña plantilla con métodos que el objeto final debería tener obligatoriamente. Esta plantilla se la conoce como interface, y permite establecer una clase con funciones definidas pero sin desarrollarla, que obliga a todas las clases que lo implemente declarar estos métodos como mínimos.

En otras palabras, las interfaces son plantillas.

Ejm

  // Los que definen las interfaces normalmente son los analistas del proyecto
  interface iTemplate {
    public function setVariable($name);
    public function getHtml();
  }

  class Template implements iTemplate {
    public function setVariable($name){

    }

    public function getHtml(){

    }
  }

 

Extensión

En las interfaces también existe el concepto de extensión.

Ejm

  // Concepto de extensión
  interface a {
    public function prueba();
  }

  interface b extends a {
    public function prueba2();
  }
  // La interfaz b tiene dos métodos, prueba() y prueba2(), el primer método se ha extendido
  // de la interfaz a y el segundo es propio de la interfaz b

  class c implements b {
    public function prueba(){};
    public function prueba2(){};
  }
  // Hemos de incluir ambos métodos de las interfaces

 

Herencia múltiple

Las interfaces también aceptan herencia múltiple.

Ejm

  // Concepto de herencia múltiple
  interface a {
    public function prueba();
  }

  interface b extends a {
    public function prueba2();
  }

  interface c extends a, b {
    function prueba3();
  }
  // La interfaz c hereda tanto de la interfaz a como de la interfaz b

  class d implements c {
    public function prueba(){};
    public function prueba2(){};
    public function prueba3(){};
  }

 

Como vemos, la interfaz c hereda de a y b, por lo que si creamos una clase basada en dicha interfaz, hay que utilizar todos los métodos de las interfaces a y b.