2012-09-02 15 views
5

Ho notato che quando definisco un metodo come astratto, la firma delle classi figlio deve essere compatibile con esso. Questo mi priva dell'opportunità di utilizzare il controllo del tipo nella firma della classe figlio.Metodo astratto PHP rispetto al metodo predefinito

Se definisco il metodo padre come metodo concreto con un'implementazione predefinita, posso quindi eseguire l'override del metodo padre senza rispettare la sua interfaccia.

Nei casi in cui esiste un'adeguata implementazione predefinita, sono propenso a utilizzare il secondo approccio. Ma mi sto lasciando nei guai?

Sembra proprio strano che l'uso di 'astratto' può essere così limitante, quindi voglio sapere se mi manca qualcosa ...

Nota - Vedo che simili questioni sono state poste in relazione ad altre lingue, ma non così tanto a PHP.

+4

In realtà è solo una buona pratica rispettare l'interfaccia. http://en.wikipedia.org/wiki/Liskov_substitution_principle – zerkms

risposta

7

Questa è una domanda molto ampia, ma in poche parole:

Se non rispetti le interfacce - si crea il disegno fragile, perché, anche se, per definizione, ogni bambino dovrebbe sostenere tutte le interfacce antenato - si interrompe esso, bu definendo interfacce incompatibili.

C'è una buona legge a tale proposito: http://en.wikipedia.org/wiki/Liskov_substitution_principle

Inoltre, è spesso un segno, che si dovrebbe preferire la delega per l'eredità.

4

L'interfaccia (o classe astratta) garantisce la coerenza con le classi. È un contratto tra te e la classe da cui hai ereditato. Questa coerenza è fondamentale quando molte persone scrivono codice e si desidera scambiare le classi in modo affidabile.

Problemi correlati