PHP OOP - Schnittstellen
PHP - Was sind Schnittstellen?
Mit Schnittstellen können Sie angeben, welche Methoden eine Klasse implementieren soll.
Schnittstellen machen es einfach, eine Vielzahl unterschiedlicher Klassen auf die gleiche Weise zu verwenden. Wenn eine oder mehrere Klassen dieselbe Schnittstelle verwenden, wird dies als "Polymorphismus" bezeichnet.
Schnittstellen werden mit dem interface
Schlüsselwort deklariert:
Syntax
<?php
interface InterfaceName {
public function someMethod1();
public function someMethod2($name, $color);
public function
someMethod3() : string;
}
?>
PHP - Schnittstellen vs. abstrakte Klassen
Schnittstellen ähneln abstrakten Klassen. Der Unterschied zwischen Schnittstellen und abstrakten Klassen ist:
- Schnittstellen können keine Eigenschaften haben, während abstrakte Klassen dies können
- Alle Schnittstellenmethoden müssen öffentlich sein, während abstrakte Klassenmethoden öffentlich oder geschützt sind
- Alle Methoden in einer Schnittstelle sind abstrakt, sodass sie nicht im Code implementiert werden können und das Schlüsselwort abstract nicht erforderlich ist
- Klassen können eine Schnittstelle implementieren und gleichzeitig von einer anderen Klasse erben
PHP - Verwenden von Schnittstellen
Um eine Schnittstelle zu implementieren, muss eine Klasse das implements
Schlüsselwort verwenden.
Eine Klasse, die eine Schnittstelle implementiert, muss alle Methoden der Schnittstelle implementieren.
Beispiel
<?php
interface Animal {
public function makeSound();
}
class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}
$animal = new Cat();
$animal->makeSound();
?>
Nehmen wir anhand des obigen Beispiels an, dass wir eine Software schreiben möchten, die eine Gruppe von Tieren verwaltet. Es gibt Aktionen, die alle Tiere ausführen können, aber jedes Tier tut es auf seine eigene Weise.
Mithilfe von Schnittstellen können wir Code schreiben, der für alle Tiere funktioniert, auch wenn sich jedes Tier anders verhält:
Beispiel
<?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();
}
?>
Beispiel erklärt
Cat, Dog und Mouse sind alle Klassen, die die Animal-Schnittstelle implementieren, was bedeutet, dass sie alle in der Lage sind, mit der makeSound()
Methode einen Ton zu erzeugen. Aus diesem Grund können wir alle Tiere durchlaufen und ihnen sagen, dass sie ein Geräusch machen sollen, auch wenn wir nicht wissen, um welche Art von Tier es sich handelt.
Da die Schnittstelle den Klassen nicht vorschreibt, wie die Methode zu implementieren ist, kann jedes Tier auf seine eigene Weise ein Geräusch erzeugen.