PHP → Абстрактные классы vs Интерфейсы

Чем интерфейсы отличаются от абстрактных классов?

Абстрактный класс — это класс, у которого не реализован один или больше методов.

Интерфейс — это по-сути абстрактный класс, у которого не реализованы все методы, все методы являются публичными и не может быть свойств.

Класс, который содержит по крайней мере один абстрактный метод, должен быть определен как абстрактный. Но абстрактный класс может не содержать абстрактных методов. Нельзя создать экземпляр абстрактного класса. Методы, объявленные абстрактными, несут лишь описательный смысл и не могут включать реализации.

При наследовании от абстрактного класса, все методы, помеченные абстрактными в родительском классе, должны быть определены в классе-потомке (область видимости этих методов должна совпадать или быть менее строгой).

Интерфейс определяет методы, которые должны быть реализованы, без их определения.

Абстрактный класс наследуется (etxends), а интерфейс реализуется (implements). Наследовать мы можем только 1 класс, а реализовать сколько угодно.

Интерфейс ни чего не реализует, а абстрактный класс реализует только общие для всех потомков методы. Абстрактный класс нужен, когда есть несколько классов, у которых есть много общего. Конечно, можно применить и интерфейс, но тогда нужно будет писать много идентичного кода.