PHP POO - Interfaces
PHP - ¿Qué son las interfaces?
Las interfaces le permiten especificar qué métodos debe implementar una clase.
Las interfaces facilitan el uso de una variedad de clases diferentes de la misma manera. Cuando una o más clases utilizan la misma interfaz, se denomina "polimorfismo".
Las interfaces se declaran con la interface
palabra clave:
Sintaxis
<?php
interface InterfaceName {
public function someMethod1();
public function someMethod2($name, $color);
public function
someMethod3() : string;
}
?>
PHP - 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
PHP - Uso de interfaces
Para implementar una interfaz, una clase debe usar la implements
palabra clave.
Una clase que implementa una interfaz debe implementar todos los métodos de la interfaz.
Ejemplo
<?php
interface Animal {
public function makeSound();
}
class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}
$animal = new Cat();
$animal->makeSound();
?>
Del ejemplo anterior, digamos que nos gustaría escribir un software que maneje un grupo de animales. Hay acciones que todos los animales pueden hacer, pero cada animal lo hace a su manera.
Usando interfaces, podemos escribir algún código que funcione para todos los animales, incluso si cada animal se comporta de manera diferente:
Ejemplo
<?php
// Interface definition
interface Animal {
public
function makeSound();
}
// Class definitions
class Cat
implements Animal {
public function makeSound() {
echo " Meow ";
}
}
class Dog implements Animal {
public function makeSound()
{
echo " Bark ";
}
}
class Mouse implements Animal {
public function makeSound() {
echo " Squeak ";
}
}
// Create a list
of animals
$cat = new Cat();
$dog = new Dog();
$mouse = new
Mouse();
$animals = array($cat, $dog, $mouse);
// Tell the animals
to make a sound
foreach($animals as $animal) {
$animal->makeSound();
}
?>
Ejemplo explicado
Gato, Perro y Ratón son clases que implementan la interfaz Animal, lo que significa que todos pueden emitir un sonido utilizando el makeSound()
método. Debido a esto, podemos recorrer todos los animales y decirles que emitan un sonido, incluso si no sabemos qué tipo de animal es cada uno.
Dado que la interfaz no le dice a las clases cómo implementar el método, cada animal puede emitir un sonido a su manera.