2012-09-02 10 views
5

Observo que cuando defino un método como abstracto, la firma de clases secundarias debe ser compatible con él. Esto me roba la oportunidad de usar la verificación de tipo en la firma de la clase del niño.Método abstracto PHP versus método predeterminado

Si defino el método principal como un método concreto con una implementación predeterminada, puedo anular el método padre sin cumplir con su interfaz.

En los casos donde existe una implementación predeterminada adecuada, me inclino a utilizar el segundo enfoque. ¿Pero me estoy metiendo en problemas?

Sólo parece extraño para mí que el uso de 'abstracta' puede ser tan limitante, por lo que quiero saber si me falta algo ...

Nota - Veo que preguntas similares se les ha pedido en relación con otros idiomas, pero no tanto PHP.

+4

En realidad, es una buena práctica que respete la interfaz. http://en.wikipedia.org/wiki/Liskov_substitution_principle – zerkms

Respuesta

7

Esta es una pregunta muy amplia, pero en pocas palabras:

Si usted no respeta las interfaces - se crea el diseño frágil, porque a pesar de que, por definición, cada niño debe apoyar todas las interfaces de los ancestros - se rompe it, bu definiendo interfaces incompatibles.

Hay una buena ley de eso: http://en.wikipedia.org/wiki/Liskov_substitution_principle

Además, es a menudo una señal, que se debe preferir la delegación sobre la herencia.

4

La interfaz (o clase abstracta) impone la coherencia con sus clases. Es un contrato que tiene entre usted y la clase de la que hereda. Esta coherencia es clave cuando varias personas escriben código y desea intercambiar clases de manera confiable.

Cuestiones relacionadas