Абстрактные классы в PHP

Изучаем абстрактные классы в PHP

Представьте, как было бы круто, если бы в интерфейсе можно было бы не только объявить методы, которые нужно реализовать, но и добавить некоторую реализацию. Например, определить какой-нибудь метод, у которого будет какая-то логика. Для этого в PHP есть абстрактные классы.

Выглядит определение абстрактного класса следующим образом:

Код доступен только после покупки курса ООП в PHP.

Давайте попробуем создать объект этого класса:

Код доступен только после покупки курса ООП в PHP.

Мы получим ошибку.
ошибка при создании объекта абстрактного класса

Создать объект абстрактного класса нельзя – от него можно только наследоваться. Примерно как с интерфейсами – их мы можем только реализовывать в других классах.

Такой класс может содержать абстрактные методы. По сути, это лишь объявление методов, которые должны быть реализованы в дочерних классах. Типа такого:

Код доступен только после покупки курса ООП в PHP.

Но он также может содержать и обычные методы, которые будут содержать вполне себе реальную бизнес-логику. Пример:

Код доступен только после покупки курса ООП в PHP.

То есть в классах-наследниках будет доступен уже реализованный метод printValue(), который без проблем можно переопределить. Он вызывает метод getValue(), который в самом классе пока не реализован, но мы можем его использовать в других методах.

Дочерние классы будут обязаны реализовать метод getValue(). Давайте опишем класс-наследник от этого абстрактного класса.

Код доступен только после покупки курса ООП в PHP.

Такой код вызовет ошибку – класс ClassA не реализовал в себе метод getValue().

Ошибка из-за нереализованности абстрактного метода

Давайте это исправим.

Код доступен только после покупки курса ООП в PHP.

Этот код вполне нормально отработает, и выведет на экран “kek”.