Інтерфейс та абстрактний клас у PHP та їх відмінності
Інтерфейс для об'єкта на PHP чи будь якій іншій мові ООП - це структура, яка оголошується з допомогою ключового слова interface
та використовується для того, щоб вказати які методи повинен мати клас, який наслідує цей інтерфейс. Ці методи повинні бути типу public, а їх реалізація в тілі інтерфейсу є відсутньою. Інтерфейс може наслідуватись іншим інтерфейсом з допомогою ключового слова extends. Для класу, який наслідує інтерфейс, використовується ключове слово implements.
Приклад інтерфейсу та класу який його використовує.
interface CarDetails{
public function CarColor();
}
class Cayenne implements CarDetails{
public function CarColor(){
}
public function CarInfo(){
$this->CarColor();
}
}
Астрактний клас відрізняється від інтерфейсу тим, що може мати як нереалізовані (о тільки оголошені) методи, так і реалізовані.
Приклад абстрактного класу
abstract
class
CarDetails{
public function CarColor();
public function CarPrice(){};
}
class Cayenne extends CarDetails{
public function CarColor(){}
public function CarPrice(){};
public function CarInfo(){
$this->CarColor();
$this->
CarPrice
();
}
}
Спільним у інтерфейсу є те, що вони використовуються для декларування методів для класів, які їх наслідують та неможливість створення їх об'єктів, тобто $obj = new CarDetails() не працюватиме, а
$obj = new Cayenne працюватиме
.
На практиці абстрактні класи використовуються для реалізації поліморфізму, який є одним із ключових принципів ООП.