Oui, le fondement de l'interface, c'est de définir les messages auxquels les classes les implémentant répondent. Ce n'est nullement de définir comment l'algorithme interne de ces classes se déroule (sinon, chaque méthode de chaque classe aurait sa propre interface dédiée).
Reprends la définition de la doc PHP: "Object interfaces allow you to specifie which methods a class must implement, without having to define how these methods are handled.". Chaque classe est libre d'implémenter la méthode à sa manière, et d'appliquer sa logique propre dans cette méthode.
Si tu veux savoir qui est capable de gérer un Hero, tu regardes le typehinting des méthodes :
Donc, qui accepte un Hero en entrée? Hero::askGold(mixed) Beggar::meetHero(Hero) Beggar::giveGold(mixed) Kid::giveGold(mixed);. Toutes ces classes acceptent un Hero en entrée: tu leur passe un Hero, elles font un truc sans planter au niveau du langage. Quel algorithme elles utilisent pour traiter cette entrée? Ca, c'est pas donné dans la signature de la méthode, mais dans la documentation de cette méthode pour chaque classe.
Reprends la définition de la doc PHP: "Object interfaces allow you to specifie which methods a class must implement, without having to define how these methods are handled.". Chaque classe est libre d'implémenter la méthode à sa manière, et d'appliquer sa logique propre dans cette méthode.
Si tu veux savoir qui est capable de gérer un Hero, tu regardes le typehinting des méthodes :
Code :
interface Hero
public function askGold(mixed);
interface Beggar
public function meetHero(Hero);
public function giveGold(mixed);
interface Kid
public function giveGold(mixed);
class Conan implements Hero
class FrancoisdAssise implements Beggar
class CalamityJane implements Hero
Donc, qui accepte un Hero en entrée? Hero::askGold(mixed) Beggar::meetHero(Hero) Beggar::giveGold(mixed) Kid::giveGold(mixed);. Toutes ces classes acceptent un Hero en entrée: tu leur passe un Hero, elles font un truc sans planter au niveau du langage. Quel algorithme elles utilisent pour traiter cette entrée? Ca, c'est pas donné dans la signature de la méthode, mais dans la documentation de cette méthode pour chaque classe.