Абстрактный класс — это родительский (базовый) класс, который не может быть использован для создания объектов — примерно такое описание можно найти в различных справочниках. Абстрактный класс похож на интерфейс, но, несмотря на схожие свойства, у них разные области применения. Чем отличается абстрактный класс от интерфейса? Технически, интерфейс может содержать только сигнатуры (определения) методов, а абстрактный класс может содержать реализацию, но главное отличие состоит в следующем: интерфейс служит для создания абстракции, а абстрактный класс, в большинстве случаев, предназначен для формирования структуры из классов с переносом одинакового функционала  в тело абстрактного класса. Возможно, звучит запутанно, но на деле все оказывается довольно просто. Давайте рассмотрим применение абстрактных классов на примере готовки трех видов пиццы: сырной, грибной и с колбасой. Для начала посмотрим на код без абстрактного класса:

Из кода выше становится понятно, что готовка пиццы состоит из четырех этапов, три из которых дублируются при приготовлении каждого типа пиццы. Абстрактный класс позволит нам убрать дублирование кода и, тем самым, сократить  и упростить его. Добавляем абстрактный класс:

Теперь повторяющиеся операции содержатся в одном месте и переносятся из базового абстрактного класса в конкретные реализации классов «выпекания» пиццы. Точно также, как и с интерфейсами, с внедрением абстрактных классов нужно быть внимательным, т.к. неумелое использование подобных инструментов может усложнить проект и запутать коллег. Когда стоит внедрять абстрактные классы в свой код? Если несколько классов, планируемых или существующих, выполняют часть одинаковых операций, причем, с объектами одного типа, то стоит.

Тонкости работы абстрактных классов на PHP можно узнать из документации.

Добавить комментарий