05-05-2010, 07:41 PM
Citation :-maitriser l'ordre des arguments que t'envoies car il n'y a plus de 'target', 'how', ... qui sont pris si besoin par la stratégie concernée, enfin je ne sais pas le faireC'est pas un problème, parce que quand tu lances une action tu sais quand même laquelle tu lances. Donc tu connais les paramètres.
Citation :- être sûr que le __call ne gère que des actions et pas autre chose (mais bon qu'à moitié, tout dépend de la gestion du __call)__call permet une liberté absolue. Je trouve que c'est un avantage. ET puis ça permet éventuellement de stocker plusieurs actions dans la même stratégie. C'est pratique pour les capacités qui vont logiquement ensemble, par exemple avec une hache de nain on peut attaquer des ennemis mais aussi couper du bois.
Par exemple avec ça :
class Unit {
private $abilities = array();
//...
public function __call ($func, $args) {
foreach ($this->abilities as $a) {
if (method_exists($a, $func)) {
call_user_func_array(array($a,$func), $args);
break;
}}
throw new Exception("$func is unavailable");
}
}
ET si on a deux actions qui se recouvrent (i.e. deux méthodes du même nom dans deux stratégies différentes), il suffit de modifier l'ordre des objets dans le tableau pour sélectionner l'autre comportement, puisque l'algorythme naïf ci-dessus prend la première qu'il trouve. L'utilisateur pourrait donc en plus choisir ses stratégies préférées, p.ex. je peux attaquer avec la hache ou l'épée, je préfère l'épée donc je la mets en priorité / plus haut dans la liste.
html, javascript, blagues, midi, etc. => http://quentinc.net/