При изучении объектно-ориентированного программирования на PHP иногда тяжело уловить различия между методами описания объектов. В чем принципиальное отличие абстрактного класса от интерфейса, в каких случаях использовать трейт.
В таблице сравниваются классы, абстрактные классы, финальные классы, интерфейсы и трейты. Объявление и создание объектов, наследование свойств и методов, передача типов.
PHP | class | abstract | final | interface | trait |
---|---|---|---|---|---|
Объявление | class SimpleClass {} | abstract class AbstractClass {} | final class FinalClass {} | interface InterfaceName {} | trait TraitName {} |
Создание объектов | $object = new SimpleClass(); | $object = new FinalClass(); | |||
Наследование | class HeirClass extends SimpleClass | class HeirClass extends AbstractClass | class HeirClass implements Interface {} | class HeirClass { use TraitName; } |
|
Множественное наследование | class HeirClass implements Interface1, Interfacet2 {} | class HeirClass { use Trait1, Trait2; } |
|||
Объявление свойств | |||||
Объявление свойств static | |||||
Объявление методов | public | ||||
Объявление методов static | |||||
Объявление методов abstract | абстрактный метод — абстрактный класс | ||||
Реализация методов | |||||
Передача типа наследникам |