Есть ли у PHP интерфейсов свойства?
имеют ли интерфейсы в PHP свойства, или у них есть только методы?
5 ответов:
это зависит от того, что вы подразумеваете под "свойствами". Если вы имеете в виду фактическое полей, то нет. Если вы имеете в виду такие свойства, как те, в C#, то да они могут (поскольку методы доступа к свойствам строго все равно синтаксический сахар для методов доступа). То же самое касается событий (хотя, конечно, в каждом случае для
get
/set
илиadd
/remove
аксессоры).обновление: поскольку PHP не имеет свойств в чувство
get
/set
аксессоры, то ответ на ваш вопрос нет. Интерфейсы не могут нести свои собственные данные/состояние.
интерфейсы в PHP могут содержать только public method подписи без тела метода. Они также могут содержать константы. Но это все. Больше ничего.
см.http://www.php.net/manual/en/language.oop5.interfaces.php
интерфейсы определяются с помощью ключевого слова interface, так же, как и стандартный класс, но без какого-либо из методов, имеющих их содержимое определено. [...] Все методы, объявленные в интерфейсе должны быть публика, это природа интерфейса. [ ... ] Возможно, что интерфейсы имеют константы. Константы интерфейса работают точно так же, как константы класса, за исключением того, что они не могут быть переопределены классом/интерфейсом, который его наследует.
PHP интерфейсы могут иметь константы, но не свойства (переменные экземпляра). Если вам не нужно изменять свое "свойство", вы можете использовать константу вместо этого.
вы можете объявить свойства в DocBlock для интерфейса. Затем IDE будет указывать эти свойства для интерфейса (PhpStorm делает), но это не приведет к фактической реализации этих полей в классе реализации. Е. Г.
/** * @property string $password * @property string $username */ interface IUserDocument { }
[допустимая] причина необходимости свойств в интерфейсе-указать, что класс DTO имеет определенный аспект, например IOrderable { OrderDate, OrderStatus}, IDeliverable { DeliveryAddress, Route,... }, прием. Этот аспект может быть использован в ряде объекты переноса данных, например, заказ на продажу, заказ, продажа счетов и т. д. Класс DTO может поддерживать несколько аспектов, т. е. множественное наследование, которое желательно в классах данных (но не в классах кода). После этого клиент DTO уверен, что он может просматривать DTO через этот аспект (контракт интерфейса). Эта модель соответствует всем 5 твердым принципам.
в PHP наиболее близким к свойствам интерфейса является traits http://php.net/manual/en/language.oop5.traits.php. подобно интерфейсам, признаки не могут быть созданы, однако могут использоваться непосредственно в классах без их реализации.