PHP OOP - Rozhraní
PHP – co jsou rozhraní?
Rozhraní vám umožňují určit, jaké metody má třída implementovat.
Rozhraní usnadňují použití řady různých tříd stejným způsobem. Když jedna nebo více tříd používá stejné rozhraní, označuje se to jako "polymorfismus".
Rozhraní jsou deklarována pomocí interface
klíčového slova:
Syntax
<?php
interface InterfaceName {
public function someMethod1();
public function someMethod2($name, $color);
public function
someMethod3() : string;
}
?>
PHP – rozhraní vs. abstraktní třídy
Rozhraní jsou podobná abstraktním třídám. Rozdíl mezi rozhraními a abstraktními třídami je:
- Rozhraní nemohou mít vlastnosti, zatímco abstraktní třídy mohou
- Všechny metody rozhraní musí být veřejné, zatímco metody abstraktní třídy jsou veřejné nebo chráněné
- Všechny metody v rozhraní jsou abstraktní, takže je nelze implementovat do kódu a klíčové slovo abstract není nutné
- Třídy mohou implementovat rozhraní a zároveň dědit z jiné třídy
PHP - Použití rozhraní
K implementaci rozhraní musí třída použít implements
klíčové slovo.
Třída, která implementuje rozhraní, musí implementovat všechny metody rozhraní.
Příklad
<?php
interface Animal {
public function makeSound();
}
class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}
$animal = new Cat();
$animal->makeSound();
?>
Z výše uvedeného příkladu řekněme, že bychom chtěli napsat software, který spravuje skupinu zvířat. Existují akce, které mohou dělat všechna zvířata, ale každé zvíře to dělá svým vlastním způsobem.
Pomocí rozhraní můžeme napsat nějaký kód, který může fungovat pro všechna zvířata, i když se každé zvíře chová jinak:
Příklad
<?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();
}
?>
Příklad vysvětlen
Kočka, pes a myš jsou všechny třídy, které implementují rozhraní Animal, což znamená, že všechny jsou schopny pomocí této makeSound()
metody vydávat zvuk. Z tohoto důvodu můžeme procházet všemi zvířaty a říkat jim, aby vydali zvuk, i když nevíme, jaký druh zvířete každé z nich je.
Protože rozhraní neříká třídám, jak metodu implementovat, každé zvíře může vydávat zvuk svým vlastním způsobem.