Interface en PHP

Interface en PHP

PHP

Si estás comenzando a programar en PHP quizás aún no sepas lo que son las interfaces, por ello lo explicaremos a continuación, mostrando ejemplos.

¿Qué son las interfaces en PHP?

Las interfaces son plantillas que establecen los métodos que deberán definirse de forma obligatoria en las clases que utilicen esta interfaz.

Cuando una o más clases utilizan la misma interfaz, se denomina «polimorfismo«.

Interfaces vs. Clases abstractas

La interfaz es similar a las clases abstractas. La diferencia entre interfaces y clases abstractas son:

  • Las interfaces no pueden tener propiedades, mientras que las clases abstractas pueden.
  • Todos los métodos de interfaz deben ser públicos, mientras que los métodos de clase abstracta son públicos o protegidos.
  • Todos los métodos en una interfaz son abstractos, por lo que no se pueden implementar en el código y la palabra clave abstracta no es necesaria.
  • Las clases pueden implementar una interfaz mientras heredan de otra clase al mismo tiempo.

Declarar una interfaz

Para declarar una interfaz utilizaremos la palabra interface. Además, declararemos los métodos que necesitemos, teniendo en cuenta que siempre lo haremos como públicos (public).

interface Machine {
    public function getPowerSupply();
}

Ejemplo básico de interface

Declaramos una interfaz Machine y la utilizaremos en la clase Car. Al definir el método getPowerSupply() en la interfaz, estaremos obligados a definirlo también en la clase.

interface Machine {
    public function getPowerSupply();
}


class Car implements Machine {
    public function getPowerSupply() {
        return ["Gasoline", "Gasoil", "Electricity", "Hybrid"];
    }
    
}

echo implode(', ', Car::getPowerSupply()); // Gasoline, Gasoil, Electricity, Hybrid

Interfaz que extiende otra interfaz

Una interfaz puede implementar a otra u otras. Por ejemplo:

interface Machine {
    public function getPowerSupply();
}

interface Vehicle extends Machine{
    public function getNumWeels();
}

En este caso, si creamos una clase lo haríamos así:

class Car implements Vehicle {
    public function getPowerSupply() {
        return ["Gasoline", "Gasoil", "Electricity", "Hybrid"];
    }
    
    public function getNumWeels() {
        return 4;
    }
}

echo Car::getNumWeels(); // 4
echo implode(', ', Car::getPowerSupply()); // Gasoline, Gasoil, Electricity, Hybrid

Clase que implementa varias interfaces

Este ejemplo es muy similar al anterior, pero en ligar de que Vehicle extienda a Machine, será la clase Car la que implemente las dos interfaces definidas.

interface Machine {
    public function getPowerSupply();
}

interface Vehicle{
    public function getNumWeels();
}

class Car implements Machine, Vehicle {
    public function getPowerSupply() {
        return ["Gasoline", "Gasoil", "Electricity", "Hybrid"];
    }
    
    public function getNumWeels() {
        return 4;
    }
}

echo Car::getNumWeels(); // 4
echo implode(', ', Car::getPowerSupply()); // Gasoline, Gasoil, Electricity, Hybrid

Escribe una respuesta