Интерфейс в PHP — это контракт, описывающий набор методов (с их сигнатурами), которые должен реализовать класс. Он определяет "что" класс делает, но не "как".
- Контракт: Класс, реализующий интерфейс, обязуется предоставить все методы, описанные в этом интерфейсе, с теми же именами, параметрами и типами возвращаемых значений.
- Наследование типов: Интерфейсы позволяют определять типы на основе поведения, а не только иерархии классов. Это полезно для полиморфизма. Вы можете работать с объектами разных классов, которые реализуют один интерфейс, как если бы они были одного типа.
- Множественное наследование поведения: PHP не поддерживает множественное наследование классов, но класс может реализовывать множество интерфейсов. Это позволяет классу иметь поведение из нескольких контрактов.
- Разделение ответственности: Интерфейсы помогают разделить определение поведения от его реализации.
php
Основные отличия от абстрактных классов:
| Характеристика | Интерфейс | Абстрактный класс |
|---|
| Тип членов | Только методы (методы должны быть публичными) | Методы (публичные, защищенные), свойства |
| Реализация методов | Нет реализации (только сигнатуры) | Может содержать реализованные методы |
| Наследование | Класс может реализовать множество интерфейсов | Класс может наследовать только один абстрактный класс |
| Конструктор | Нет | Может иметь конструктор |
| Члены с областью видимости | Только public | public, protected |