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.