¿Las interfaces en PHP tienen propiedades, o solo tienen métodos?¿Las interfaces de PHP tienen propiedades?
Respuesta
Depende de lo que quiere decir con "propiedades". Si te refieres a campos reales, entonces no, no lo hacen. Si te estás refiriendo a propiedades como las de C#, entonces sí pueden (ya que los accesadores de propiedad son azúcar estrictamente sintáctica para los métodos de acceso de todos modos). Lo mismo ocurre con los eventos (aunque, por supuesto, en cada caso, no se especifica ninguna implementación para los accesos get
/set
o add
/remove
).
actualización: A partir de PHP no tiene propiedades en el sentido de get
/set
descriptores de acceso, entonces la respuesta a su pregunta es no. Las interfaces no pueden llevar sus propios datos/estado.
Las constantes se consideran datos en algunos círculos. ymmv –
@ nickl- Esos círculos están locos porque los cambios de estado, las constantes no. – mpen
Las interfaces de PHP pueden tener constantes, pero no propiedades (variables de instancia). Si no necesita modificar su "propiedad", puede usar una constante en su lugar.
Las interfaces en PHP solo pueden contener el método público firmas sin cuerpo de método. También pueden contener constantes. Pero eso es todo. Nada más.
Ver http://www.php.net/manual/en/language.oop5.interfaces.php
Interfaces se definen utilizando la palabra clave de la interfaz, de la misma manera como una clase estándar, pero sin que ninguno de los métodos de haber definido su contenido. [...] Todos los métodos declarados en una interfaz deben ser públicos, esta es la naturaleza de una interfaz. [...] Es posible que las interfaces tengan constantes. Las constantes de interfaz funcionan exactamente como las constantes de clase, excepto que no pueden ser anuladas por una clase/interfaz que lo herede.
El motivo [válido] para necesitar propiedades en una interfaz es especificar que una clase DTO tiene un cierto aspecto, p. IOrderable {OrderDate, OrderStatus}, IDeliverable {DeliveryAddress, Route, ...}, etc. El aspecto se puede usar en varios DTOs, p. Pedido de cliente, orden de trabajo, facturas de venta, etc. Una clase de DTO puede admitir múltiples aspectos, es decir, herencia múltiple que es deseable en las clases de datos (pero no en las clases de códigos). A partir de entonces, el cliente del DTO está seguro de que puede ver el DTO a través de ese aspecto (un contrato de interfaz). Este patrón se rige por los 5 principios SOLIDOS.
En PHP, lo más cercano que tiene a las propiedades de la interfaz son los rasgos http://php.net/manual/en/language.oop5.traits.php. De forma similar a las interfaces, los rasgos no se pueden crear instancias, sin embargo se pueden usar directamente en las clases sin implementarlos.
Un rasgo no es de ninguna manera similar a una "propiedad" de interfaz, ni es muy similar a una interfaz en absoluto. Esto es simplemente incorrecto –
Una interfaz es un modelo para los métodos de una clase, un rasgo es un grupo de métodos/propiedades que se pueden compartir fácilmente entre clases sin usar herencia o inyección de dependencia. –
@A_funs Editado mi respuesta para aclarar el punto – Michael
- 1. ¿Deben las interfaces definir propiedades?
- 2. ¿Las interfaces tienen el método toString?
- 3. ¿Las interfaces de usuario de caracteres tienen futuro?
- 4. Delphi Rtti: Explore las propiedades de las interfaces?
- 5. Por qué las propiedades no son declarables en las interfaces
- 6. Interfaces y propiedades
- 7. SPL de PHP: ¿Sus interfaces que involucran matrices cubren todas las propiedades de la matriz?
- 8. PHP: ¿las matrices tienen un tamaño máximo?
- 9. ¿Las propiedades siempre tienen un valor cuando están desactivadas?
- 10. ¿Las propiedades implementadas automáticamente tienen un conjunto privado?
- 11. Generar interfaces PHP
- 12. Comprensión de las interfaces
- 13. ¿Implementando propiedades de interfaz en interfaces?
- 14. ¿Cuál es el punto de las interfaces en PHP?
- 15. ¿Cuál es el propósito de las interfaces en php?
- 16. Si las interfaces no tienen constructores, ¿la clase de objeto es superclase de una interfaz?
- 17. ¿Deberían las entidades implementar interfaces?
- 18. Obteniendo el atributo helptring aplicado a las propiedades de C# expuestas a través de las interfaces COM
- 19. ¿Codificando a las interfaces?
- 20. Autorreferencia en las interfaces
- 21. Anotaciones en las interfaces?
- 22. ¿Propósito de las interfaces Zope?
- 23. Importancia de las interfaces C#
- 24. iterar sobre las propiedades de una clase php
- 25. comparar las propiedades de objetos y Mostrar diff en PHP
- 26. PHP copie todas las propiedades de objeto a este
- 27. Looping a través de todas las propiedades del objeto php
- 28. ¿Cómo se definen las propiedades de una clase en php?
- 29. Asignaciones de NHibernate cuando las relaciones de unión automática tienen propiedades adicionales
- 30. ¿Cómo verificar rápidamente si dos objetos de transferencia de datos tienen las mismas propiedades en C#?
* (referencia) * http://www.php.net/manual/en/language.oop5.interfaces.php – Gordon
La pregunta era razonable en eso, uno podría pensar en una propiedad pública de una clase como parte de la interfaz pública de esa clase, y uno podría desear forzar a las clases que implementan una interfaz para que una determinada propiedad con nombre esté disponible. Pero no puedes, entonces solo tienes que tener los métodos getProperty() setProperty() en la interfaz, lo cual no es malo ya que todos saben que las propiedades públicas son malas (todos sabemos que no?) ? ¿no es así?) –