Подтвердить что ты не робот

У PHP-интерфейсов есть свойства?

У интерфейса в PHP есть свойства или у них есть только методы?

4b9b3361

Ответ 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. Подобно интерфейсам, черты не могут быть созданы, однако их можно использовать непосредственно в классах без их реализации.