❓ В чём разница между interface и abstract class?
Interface — это контракт. Только сигнатуры методов, никакой реализации (до PHP 8 — вообще, в 8+ можно константы). Класс может имплементировать сколько угодно интерфейсов.
Abstract class — частичная реализация. Можно миксовать абстрактные методы с готовыми, хранить состояние (свойства). Наследование — только одно.
🔹 Когда interface:
— описываешь поведение, не связанное иерархией (Loggable, Serializable, Cacheable)
— хочешь возможность имплементировать несколько контрактов
🔹 Когда abstract class:
— есть общий код, который не хочешь дублировать
— классы реально связаны иерархически (BaseRepository, BaseCommand)
На практике — предпочитай интерфейс + trait вместо абстрактного класса. Получаешь гибкость множественного наследования поведения без жёсткой иерархии.
Post #1193
1.19K
- ❤ 3
- 👍 3
- 🔥 1