Есть ли у PHP интерфейсов свойства?


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

5 54

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