Інтерфейс та абстрактний клас у PHP та їх відмінності

Інтерфейс та абстрактний клас у 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 працюватиме.

На практиці абстрактні класи використовуються для реалізації поліморфізму, який є одним із ключових принципів ООП.