PHP ООП - Інтерфейси
PHP - Що таке інтерфейси?
Інтерфейси дозволяють вказати, які методи має реалізувати клас.
Інтерфейси спрощують однакове використання різноманітних класів. Коли один або кілька класів використовують той самий інтерфейс, це називається "поліморфізмом".
Інтерфейси оголошуються за допомогою ключового слова interface
:
Синтаксис
<?php
interface InterfaceName {
public function someMethod1();
public function someMethod2($name, $color);
public function someMethod3() : string;
}
?>
PHP - Інтерфейси та абстрактні класи
Інтерфейс схожий на абстрактні класи. Різниця між інтерфейсами та абстрактними класами:
- Інтерфейси не можуть мати властивості, тоді як абстрактні класи можуть
- Усі методи інтерфейсу мають бути публічними, тоді як методи абстрактного класу є загальнодоступними або захищеними
- Усі методи в інтерфейсі є абстрактними, тому їх не можна реалізувати в коді, а ключове слово abstract не потрібне
- Класи можуть реалізовувати інтерфейс, одночасно успадковуючи від іншого класу
PHP - Використання інтерфейсів
Щоб реалізувати інтерфейс, клас має використовувати ключове слово implements
.
Клас, який реалізує інтерфейс, повинен реалізовувати всі методи інтерфейсу.
Приклад
<?php
interface Animal {
public function makeSound();
}
class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}
$animal = new Cat();
$animal->makeSound();
?>
Спробуйте самі »
З наведеного вище прикладу припустимо, що ми хотіли б написати програмне забезпечення, яке керує групою тварин. Є дії, які можуть виконувати всі тварини, але кожна тварина робить це по-своєму.
Використовуючи інтерфейси, ми можемо написати код, який працюватиме для всіх тварин, навіть якщо кожна тварина поводиться по-різному:
Приклад
<?php
// Визначення інтерфейсу
interface Animal {
public function makeSound();
}
// Визначення класу
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 ";
}
}
// Створити список тварин
$cat = new Cat();
$dog = new Dog();
$mouse = new Mouse();
$animals = array($cat, $dog, $mouse);
// Скажіть тваринам, щоб видати звук
foreach($animals as $animal) {
$animal->makeSound();
}
?>
Спробуйте самі »
Пояснення прикладу
Cat, Dog і Mouse — усі класи, які реалізують інтерфейс Animal, що означає, що всі вони можуть видавати звук за допомогою методу makeSound()
. Завдяки цьому ми можемо переглянути всіх тварин і наказати їм видавати звуки, навіть якщо ми не знаємо, до якого типу належить кожна тварина.
Оскільки інтерфейс не повідомляє класам, як реалізувати метод, кожна тварина може видавати звук по-своєму.