Le PHP interfaces ont des propriétés?
Faire des interfaces en PHP ont des propriétés, ou ont-ils seulement qui ont des méthodes?
- (référence) php.net/manual/en/language.oop5.interfaces.php
- La question a été raisonnable en cela, on pourrait penser à une propriété publique d'une classe dans le cadre de classes de l'interface publique, et l'on pourrait le souhaiter à force de classes implémentant une interface de rendre une propriété nommée disponibles. Mais vous ne pouvez pas - vous avez juste à avoir getProperty() setProperty() les méthodes de l'interface - qui n'est pas une mauvaise chose puisque tout le monde connaît les propriétés publiques sont mal (nous savons tous que n'avons-nous pas? faisons-nous? n'est-ce pas?)
Vous devez vous connecter pour publier un commentaire.
Cela dépend de ce que tu veux dire par "propriétés". Si vous voulez dire des champs réels, alors non, ils ne le font pas. Si vous êtes à la référence à des propriétés telles que celles en C#, alors oui, on peut (depuis les accesseurs de propriété sont strictement sucre syntaxique pour les méthodes d'accès de toute façon). Il en va de même pour les événements (même si bien sûr, dans chaque cas, la mise en œuvre est spécifié pour le
get
/set
ouadd
/remove
accesseurs).Mise à jour: Depuis PHP n'a pas de propriétés dans le sens de
get
/set
accesseurs, alors la réponse à votre question est non. Les Interfaces ne peuvent pas réaliser leurs propres données/de l'état.Interfaces en PHP ne peut contenir méthode publique signatures sans un corps de méthode. Ils peuvent également contenir des constantes. Mais c'est tout. Rien d'autre.
Voir http://www.php.net/manual/en/language.oop5.interfaces.php
PHP interfaces peuvent avoir des constantes, mais pas de propriétés (variables d'instance). Si vous n'avez pas besoin de modifier votre "propriété", vous pouvez utiliser une constante à la place.
Vous pouvez déclarer des propriétés dans DocBlock pour l'interface. L'IDE sera alors soupçon ces propriétés de l'interface (PhpStorm n') mais ce ne sera pas de la force de la mise en œuvre effective de ces champs dans la mise en œuvre de la classe. E. g.
L' [valide] raison pour avoir besoin de propriétés dans une interface est à préciser qu'un DTO classe a un certain aspect, par exemple IOrderable { date de Commande, OrderStatus }, IDeliverable { DeliveryAddress, Itinéraire, ... }, etc. L'aspect peut être utilisé dans un certain nombre de Dto par exemple les Ventes de l'Ordre, de l'Ordre de Travail, Factures de Ventes, etc. Un DTO classe peut prendre en charge plusieurs aspects, à savoir l'héritage multiple qui est souhaitable dans les Classes de Données (mais pas de Code Classes). Par la suite, le client de la DTO est assuré qu'il peut afficher les DTO par cet aspect (une interface de contrat). Ce modèle respecte toutes les 5 des principes SOLIDES.
En PHP le plus proche que vous avez à les propriétés de l'interface est de traits http://php.net/manual/en/language.oop5.traits.php. Similaire aux interfaces, les traits ne peut pas être instanciée, cependant, et peut être utilisé directement dans les classes sans les mettre en œuvre.