Una interfaz en la vida diaria es una manera común de usar cierto tipo de objetos, por ejemplo esperamos que todos los autos, sin importar su marca, modelo, año o tipo, tengan ciertos elementos como son un volante, pedales para el acelerador y el freno, etc.

Interface PHP

En informática este tipo de conceptos se aplica a ciertos dispositivos que aunque puedan ser diferentes entre sí comparten interfaces comunes como son los puertos de acceso (USB, HDMI, etc.)

En la programación orientada a objetos las interfaces nos permiten crear objetos aún más flexibles, dado que si un controlador necesita un repositorio, podemos solicitar una interface en vez de una implementación en concreta, vean el siguiente ejemplo:

class AdminSectionsController extends \BaseController {

    protected $sectionRepo;

    public function __construct(SectionRepoInterface $sectionRepo)
    {
        $this->sectionRepo = $sectionRepo;
    }

}

En este caso SectionRepoInterface podría no ser una clase en concreto sino una interface, y se definiría de la siguiente manera:

interface SectionRepoInterface
{

    public function findOrFail($id);

    public function search(array $data = array(), $paginate = false);

    public function create(array $data);

    //etc...
}

Noten que una interface no define el cuerpo (código) de los métodos, ya que esto es trabajo de la implementación.

Implementar una interface es tan fácil como extender una clase, se hace de esta manera:

class SectionRepo extends BaseRepo implements SectionRepoInterface {

}

Al hacer esto es necesario que la nueva clase SectionRepo implemente los métodos de SectionRepoInterface, es decir findOrFail, search, create, con los mismos parámetros, de lo contrario PHP nos devolverá un error si intentamos usar la clase.

En el siguiente video les daré una explicación más detallada, así mismo vamos a hacer que nuestro controlador AdminSectionsController ya no esté atado a una implementación de Eloquent sino sea más flexible recibiendo una interfaz:

En un siguiente tutorial, vamos a ver un ejemplo aún más avanzado creando otra implementación de SectionRepo que no usará Eloquent sino Arrays, para demostrarles este concepto.

Vale repetir que para sistemas más sencillos quizás no haga falta crear interfaces pero para sistemas más avanzados es muy útil entender este concepto.

Continua aprendiendo: Cómo implementar repositorios en Laravel

¿Has usado interfaces en tus programas? ¿Cómo las llamas? ¿Qué otras utilidades puedes pensar del uso de interfaces? ¿Conoces otros ejemplos de interfaces en la vida real? Mantengamos la discusión en los comentarios:

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Cómo encadenar métodos con PHP (POO) Lección siguiente Sustituye implementaciones usando Stubs e Interfaces en PHP (POO)