Se vio anteriormente que las clases abstractas permiten generar funciones que no necesitan implementarse por la clase padre.
Las interfaces actúan de forma similar, pero difieren en que todos sus métodos no se implementan. Esto implica que una interface se encarga de definir el comportamiento de las clases que la implementen.

Problema

Se ha definido las siguientes clases: Pato, Pingüino, Cóndor y Gallina. Se ha establecido que existen atributos y métodos que comparten estas tres clases de aves y que se puede remitir dichas similitudes en una clase denominada Ave. Sin embargo, se puede observar que hay ciertas variaciones en el comportamiento de cada uno, por ejemplo:

Caso 1: Ave es clase no abstracta

Este caso implica que deben crearse e implementarse dos métodos: nadar() y volar(). La implementación en este punto es un tanto borrosa, debido a que esta superclase es muy general, se supone que de ella se derivarán todos los tipos de aves existentes.

caso1
Caso 1: Clase no abstracta

Miremos, por ejemplo, la clase Cóndor hereda las dos funciones. Sin embargo, una de ellas no es parte de su naturaleza (nadar). Podría sobrescribir dicho método y retornar algún valor no valido. Al final es una construcción errónea.

Caso 2: Ave es clase abstracta

Este caso es similar al caso 1. La diferencia radica en que no se implementa las funciones, pero en cambio obligan a que lo haga las clases derivadas, obteniendo el mismo problema del caso 1.

Caso 3: Separar los comportamientos

El caso es que ambos comportamientos (nadar y volar) son independientes, por lo que la opción a observar es que se separen en estructuras independientes. Así el Pinguino usará heredará de la estructura que contenga la función nadar(), Cóndor de la que tenga la función volar() y Pato de ambas estructuras. Sabiendo que la herencia múltiple no es posible en PHP queda la única opción: Interfaces.

caso2
Uso de interface

Bajo este esquema, es posible que las interfaces creadas puedan plantear el comportamiento no solo de tipos de aves, sino que de otras clases que deseen implementarlos.

Características

Implementación de Interfaces

Es posible utilizar la herencia entre interfaces.

https://gist.github.com/jeavila/a9c44cdb3e1e846f65ba2a80c2d428be

Uso de constantes dentro de interfaces

Además de métodos públicos, es posible utilizar constantes dentro de una interface.

https://gist.github.com/jeavila/003f7ccf90f9e7f4aa9c425780e199f3

Algunas interfaces de PHP

El siguiente enlace: interfaces de PHP contiene algunas interfaces útiles para implementar.

Representación en UML

Las interfaces se representan con una circunferencia. La relación que existe ente una clase y una interface se llama Realización.

Realizacion
Realización

Referencias

Interfaces (Sitio Oficial de PHP)