У интерфейса в PHP есть свойства или у них есть только методы?
У PHP-интерфейсов есть свойства?
Ответ 1
Это зависит от того, что вы подразумеваете под "свойствами". Если вы имеете в виду фактические поля, то нет, они этого не делают. Если вы ссылаетесь на свойства, такие как на С#, то да, они могут (так как аксессоры свойств являются строго синтаксическим сахаром для методов доступа в любом случае). То же самое относится к событиям (хотя, конечно, в каждом случае реализация не применяется для get
/set
или add
/remove
аксессуаров).
Обновить. Поскольку у PHP нет свойств в смысле get
/set
аксессуаров, тогда ответ на ваш вопрос - нет. Интерфейсы не могут нести свои собственные данные/состояние.
Ответ 2
Интерфейсы в PHP могут содержать только общедоступный метод подписи без тела метода. Они также могут содержать константы. Но это так. Больше ничего.
См. http://www.php.net/manual/en/language.oop5.interfaces.php
Интерфейсы определяются с помощью ключевого слова интерфейса так же, как и стандартный класс, но без каких-либо методов, определяющих их содержимое. [...] Все методы, объявленные в интерфейсе, должны быть общедоступными, это характер интерфейса. [...] Его возможности для интерфейсов иметь константы. Константы интерфейса работают точно так же, как и константы класса, за исключением того, что они не могут быть переопределены классом/интерфейсом, который наследует его.
Ответ 3
PHP-интерфейсы могут иметь константы, но не свойства (переменные экземпляра). Если вам не нужно изменять свое свойство, вы можете использовать константу вместо этого.
Ответ 4
[действительная] причина необходимости использования свойств в интерфейсе заключается в том, чтобы указать, что класс DTO имеет определенный аспект, например. IOrderable {OrderDate, OrderStatus}, IDeliverable {DeliveryAddress, Route,...} и т.д. Аспект может использоваться в ряде DTO, например. Заказ на продажу, Рабочий заказ, Счета-фактуры и т.д. Класс DTO может поддерживать несколько аспектов, то есть множественное наследование, которое желательно в классах данных (но не в классах классов). После этого клиент DTO уверен, что он может просматривать DTO через этот аспект (контракт интерфейса). Этот шаблон соответствует всем 5 принципам SOLID.
В PHP ближе всего к свойствам интерфейса относятся черты http://php.net/manual/en/language.oop5.traits.php. Подобно интерфейсам, черты не могут быть созданы, однако их можно использовать непосредственно в классах без их реализации.