PHP OOP - Interfacce
PHP - Cosa sono le interfacce?
Le interfacce consentono di specificare quali metodi dovrebbe implementare una classe.
Le interfacce semplificano l'utilizzo di una varietà di classi diverse allo stesso modo. Quando una o più classi utilizzano la stessa interfaccia, si parla di "polimorfismo".
Le interfacce sono dichiarate con la interface
parola chiave:
Sintassi
<?php
interface InterfaceName {
public function someMethod1();
public function someMethod2($name, $color);
public function
someMethod3() : string;
}
?>
PHP - Interfacce e classi astratte
L'interfaccia è simile alle classi astratte. La differenza tra interfacce e classi astratte sono:
- Le interfacce non possono avere proprietà, mentre le classi astratte possono
- Tutti i metodi di interfaccia devono essere pubblici, mentre i metodi di classe astratta sono pubblici o protetti
- Tutti i metodi in un'interfaccia sono astratti, quindi non possono essere implementati nel codice e la parola chiave abstract non è necessaria
- Le classi possono implementare un'interfaccia ereditando contemporaneamente da un'altra classe
PHP - Utilizzo delle interfacce
Per implementare un'interfaccia, una classe deve utilizzare la implements
parola chiave.
Una classe che implementa un'interfaccia deve implementare tutti i metodi dell'interfaccia.
Esempio
<?php
interface Animal {
public function makeSound();
}
class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}
$animal = new Cat();
$animal->makeSound();
?>
Dall'esempio sopra, diciamo che vorremmo scrivere un software che gestisca un gruppo di animali. Ci sono azioni che tutti gli animali possono fare, ma ogni animale lo fa a modo suo.
Usando le interfacce, possiamo scrivere del codice che può funzionare per tutti gli animali anche se ogni animale si comporta in modo diverso:
Esempio
<?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();
}
?>
Esempio spiegato
Cat, Dog e Mouse sono tutte classi che implementano l'interfaccia Animal, il che significa che tutte sono in grado di emettere un suono usando il makeSound()
metodo. Per questo motivo, possiamo scorrere tutti gli animali e dire loro di emettere un suono anche se non sappiamo che tipo di animale sia ciascuno.
Poiché l'interfaccia non dice alle classi come implementare il metodo, ogni animale può emettere un suono a modo suo.