PHP OOP - Interfejsy
PHP — co to są interfejsy?
Interfejsy pozwalają określić, jakie metody powinna implementować klasa.
Interfejsy ułatwiają korzystanie z wielu różnych klas w ten sam sposób. Gdy jedna lub więcej klas korzysta z tego samego interfejsu, jest to określane jako „polimorfizm”.
Interfejsy deklarowane są za pomocą interface
słowa kluczowego:
Składnia
<?php
interface InterfaceName {
public function someMethod1();
public function someMethod2($name, $color);
public function
someMethod3() : string;
}
?>
PHP — interfejsy a klasy abstrakcyjne
Interfejs jest podobny do klas abstrakcyjnych. Różnica między interfejsami a klasami abstrakcyjnymi to:
- Interfejsy nie mogą mieć właściwości, podczas gdy klasy abstrakcyjne mogą
- Wszystkie metody interfejsu muszą być publiczne, podczas gdy metody klasy abstrakcyjnej są publiczne lub chronione
- Wszystkie metody w interfejsie są abstrakcyjne, więc nie można ich zaimplementować w kodzie, a słowo kluczowe abstract nie jest konieczne
- Klasy mogą implementować interfejs, jednocześnie dziedzicząc z innej klasy
PHP — korzystanie z interfejsów
Aby zaimplementować interfejs, klasa musi użyć implements
słowa kluczowego.
Klasa, która implementuje interfejs, musi implementować wszystkie metody interfejsu.
Przykład
<?php
interface Animal {
public function makeSound();
}
class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}
$animal = new Cat();
$animal->makeSound();
?>
Z powyższego przykładu załóżmy, że chcielibyśmy napisać oprogramowanie do zarządzania grupą zwierząt. Są działania, które mogą wykonać wszystkie zwierzęta, ale każde zwierzę robi to na swój sposób.
Korzystając z interfejsów, możemy napisać kod, który będzie działał dla wszystkich zwierząt, nawet jeśli każde zwierzę zachowuje się inaczej:
Przykład
<?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();
}
?>
Przykład wyjaśniony
Cat, Dog i Mouse to wszystkie klasy, które implementują interfejs Animal, co oznacza, że wszystkie z nich są w stanie wydać dźwięk za pomocą tej makeSound()
metody. Z tego powodu możemy zapętlić wszystkie zwierzęta i powiedzieć im, aby wydały dźwięk, nawet jeśli nie wiemy, jakiego rodzaju zwierzę jest.
Ponieważ interfejs nie mówi klasom, jak zaimplementować metodę, każde zwierzę może wydać dźwięk na swój własny sposób.