2010-05-03 8 views
50

¿Las interfaces en PHP tienen propiedades, o solo tienen métodos?¿Las interfaces de PHP tienen propiedades?

+0

* (referencia) * http://www.php.net/manual/en/language.oop5.interfaces.php – Gordon

+2

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í?) –

Respuesta

28

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.

+3

Las constantes se consideran datos en algunos círculos. ymmv –

+1

@ nickl- Esos círculos están locos porque los cambios de estado, las constantes no. – mpen

10

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.

17

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.

-1

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.

+0

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 –

+0

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. –

+0

@A_funs Editado mi respuesta para aclarar el punto – Michael

Cuestiones relacionadas