PHP OOP - Interfaces
PHP - O que são interfaces?
Interfaces permitem que você especifique quais métodos uma classe deve implementar.
As interfaces facilitam o uso de uma variedade de classes diferentes da mesma maneira. Quando uma ou mais classes usam a mesma interface, ela é chamada de "polimorfismo".
As interfaces são declaradas com a interface
palavra-chave:
Sintaxe
<?php
interface InterfaceName {
public function someMethod1();
public function someMethod2($name, $color);
public function
someMethod3() : string;
}
?>
PHP - Interfaces vs. Classes Abstratas
Interface são semelhantes às classes abstratas. A diferença entre interfaces e classes abstratas são:
- Interfaces não podem ter propriedades, enquanto classes abstratas podem
- Todos os métodos de interface devem ser públicos, enquanto os métodos de classe abstrata são públicos ou protegidos
- Todos os métodos em uma interface são abstratos, portanto, não podem ser implementados em código e a palavra-chave abstract não é necessária
- As classes podem implementar uma interface enquanto herdam de outra classe ao mesmo tempo
PHP - Usando Interfaces
Para implementar uma interface, uma classe deve usar a palavra- implements
chave.
Uma classe que implementa uma interface deve implementar todos os métodos da interface.
Exemplo
<?php
interface Animal {
public function makeSound();
}
class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}
$animal = new Cat();
$animal->makeSound();
?>
A partir do exemplo acima, digamos que gostaríamos de escrever um software que gerencie um grupo de animais. Existem ações que todos os animais podem fazer, mas cada animal faz isso à sua maneira.
Usando interfaces, podemos escrever algum código que funcione para todos os animais, mesmo que cada animal se comporte de maneira diferente:
Exemplo
<?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();
}
?>
Exemplo explicado
Cat, Dog e Mouse são todas classes que implementam a interface Animal, o que significa que todas elas são capazes de fazer um som usando o makeSound()
método. Por causa disso, podemos percorrer todos os animais e dizer-lhes para fazer um som, mesmo que não saibamos que tipo de animal é cada um.
Como a interface não informa às classes como implementar o método, cada animal pode emitir um som à sua maneira.