Oui, tu lui passes ce que tu veux (t'as choisi ce contrat de méthode-là, alors, j'ai suivi).
Si askGold ne doit marcher que pour un typage donné, oui, tu typehint cette méthode. Relis Ajout sans changement d'interface ni de classe et tu verras que la méthode est typée, car elle n'est prévue que pour accepter IAlcoholConsummer, mais ce Barman a choisi de discriminer ses consommateurs en fonctions de critères persos, internes à la classe.
Un autre Barman pourrait faire:
Si d'autres nous lisent, je veux bien qu'ils reformulent ce que j'essaie de faire passer, cela pourra peut-être aider Si askGold ne doit marcher que pour un typage donné, oui, tu typehint cette méthode. Relis Ajout sans changement d'interface ni de classe et tu verras que la méthode est typée, car elle n'est prévue que pour accepter IAlcoholConsummer, mais ce Barman a choisi de discriminer ses consommateurs en fonctions de critères persos, internes à la classe.
Un autre Barman pourrait faire:
Code PHP :
<?php
class MecanicalBarman implements IBarman {
/**
* Screw humans, I won't give you alcohol.
*/
public giveAlcoholTo(IAlcoholConsummer $consummer) {
return
($consummer->askAge() > $this->minAge && !$consummer instanceof IHuman)
? new Alcohol() : null;
}
}
Comment tu ferais, toi, avec tes brouettes de méthodes pour que Barman serve les gens en fonction de leur age et leur religion, et pour que MecanicalBarman les servent en fonction de leur age et du fait qu'ils ne soient pas des humains?