Gaia aura quand même le défaut de nécessiter un héritage moche qui limite les possibilités par la suite (car PHP n'autorise l'héritage que d'une seule classe parente). La composition rendrait le développement d'une classe inutilement lourd.
Justement, j'ai cherché un exemple un peu moins trivial, et j'en suis venu à celui-ci, sur lequel j'aimerai vos retours. L'idée est d'avoir des interfaces pour les nombres (Nombre d'un coté, et Entier/Fraction/Reel qui l'étendent), implémentées dans des classes. Puis on crée une autre classe, une calculatrice, qui accepte un Nombre en entrée (générique), et retourne un Nombre en sortie. Suivant les entrée, la classe instanciée pour la sortie diffère (et le calcul aussi du coup).
Justement, j'ai cherché un exemple un peu moins trivial, et j'en suis venu à celui-ci, sur lequel j'aimerai vos retours. L'idée est d'avoir des interfaces pour les nombres (Nombre d'un coté, et Entier/Fraction/Reel qui l'étendent), implémentées dans des classes. Puis on crée une autre classe, une calculatrice, qui accepte un Nombre en entrée (générique), et retourne un Nombre en sortie. Suivant les entrée, la classe instanciée pour la sortie diffère (et le calcul aussi du coup).
class SmartCalculatrice implements Additionneur {
public function addition(Nombre $a, Nombre $b) {
return
($a instanceof Fraction && $b instanceof Fraction)?
new Fraction (
$a->getNumerateur()*$b->getDenominateur
+ $b->getNumerateur()*$a->getDenominateur(),
$a->getDenominateur()*$b->getDenominateur()
):
new Reel($a->getValeur()+$b->getValeur());
}
}