Что такое абстрактные классы?
Абстрактные классы в PHP представляют собой специальный вид классов, которые служат базовыми шаблонами для других классов и не предполагают прямого создания экземпляров. Главная особенность абстрактного класса заключается в том, что разработчик не может создать объект такого класса напрямую через оператор new, поскольку он является лишь концептуальной основой для будущих дочерних классов. Попытка создать экземпляр приведет к ошибке уровня выполнения, что защищает архитектуру приложения от некорректного использования недописанных базовых сущностей.
Синтаксически такой класс объявляется с добавлением ключевого слова abstract перед словом class. Внутри абстрактного класса могут находиться как полностью реализованные методы со своим телом, так и абстрактные методы, которые объявляются с ключевым словом abstract и не имеют никакой реализации, заканчиваясь точкой с запятой. Наличие хотя бы одного абстрактного метода автоматически делает весь класс абстрактным, требуя соответствующего объявления на уровне сигнатуры.
Когда какой-либо класс наследуется от абстрактного класса с помощью ключевого слова extends, он берет на себя жесткое обязательство. Наследник обязан в обязательном порядке реализовать все абстрактные методы родительского класса, написав для них конкретный программный код. Если дочерний класс пропускает реализацию хотя бы одного такого метода, он сам должен быть объявлен абстрактным. Такой подход позволяет совмещать общую для всех наследников логику и строгие требования к специфическому поведению каждого подкласса.