Блог

Про интерфейсы в PHP

Утащил с хабра, пусть будет.

Интерфейс зачастую определяет только один аспект поведения реализующего его класса, в то время как абстрактный класс определяет саму суть (природу) объектов его подклассов. По информации, что какой-то объект instanceof MyInterface ничего конкретного об этом объекте сказать нельзя (кроме того, что у него точно есть пара методов, определенных в MyInterface). Например, интерфейс может называться Comparable, а реализовывать его могут классы Money, User и Rating. Каждый из этих классов — обособленная сущность предметной области, все они разной природы. Если же есть информация, что какой-то объектinstanceof MyAbstractClass, это всегда должно означать что мы имеем дело с иерархией объектов одной природы. Например, абстрактный класс может называться Car, тогда все его наследники 100% должны быть также машинами. Рассматривать абстрактные классы как замену интерфейсам (и наоборот) в корне некорректно в силу их абсолютно разного назначения.