JeuWeb - Crée ton jeu par navigateur
PHP, vos astuces pour palier à ses défauts ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : PHP, vos astuces pour palier à ses défauts ? (/showthread.php?tid=5696)

Pages : 1 2 3 4 5 6 7 8


PHP, vos astuces pour palier à ses défauts ? - Argorate - 17-09-2011

Bonsoir,

J'aimerais savoir quel astuces ou méthodes utilisez-vous pour palé aux défauts de PHP?

1) Impossibilité de déclarer plusieurs méthodes ayant le même nom mais un nombre d'argument différent.

2) Impossibilité de déclarer plusieurs méthodes ayant le même nom et le même nombre d'argument mais de type différent.

C'est assez contraignant et je souhaiterais connaitre l'avis de personne ayant un peu plus d'expérience sur ces problème lié aux langage.

merci.

PS: pourquoi il n'y a pas eut (depuis le temps) de patch correctif de ses deux points (qui sont au final les mêmes : différencié les méthodes en fonction de leur noms & de leurs arguments)?


RE: PHP, vos astuces pour palier à ses defauts? - popayan - 17-09-2011

tu passes un hash à ta méthode?
mais bon, pour moi, si tu as besoin de 2 méthodes qui font la même chose mais avec des entrées différentes, le mieux est de séparer le code?


RE: PHP, vos astuces pour palier à ses defauts? - niahoo - 18-09-2011

j'utilise erlang.


RE: PHP, vos astuces pour palier à ses defauts? - Sephi-Chan - 18-09-2011

Ces deux caractéristiques que tu cites — qu'on regroupe sous le nom de surcharge de méthode (method overloading) — est un mécanisme propres aux langages fortement et statiquement typés (comme Java ou C++) et/ou capables de pattern matching (comme Erlang). PHP ne fait partie d'aucune de ces catégorie. Inutile donc d'attendre un patch, ça n'arrivera jamais.

Comme avec tous les langages, il faut oublier ce que tu n'as pas (surtou qu'avec PHP tu risques de te faire du mal...) et tirer profit de ce propose le langage. En l'occurrence, je te conseille d'opter pour une approche simple (qui suit le principe KISS, Keep It Simple Stupid) avec des méthodes aux noms différents. Chacun son rôle et c'est très bien ainsi.

Mais le conseil le plus précieux (et sérieux) que je peux te donner : change de langage dès que tu en as l'occasion. PHP est facile â apprendre et à heberger mais le langage n'a aucune qualité particulière.


RE: PHP, vos astuces pour palier à ses defauts? - Ter Rowan - 18-09-2011

perso, si j avais à employer n méthodes avec le même nom, je le ferai au moyen de func_get_args

du coup ca donne un truc du genre :

function maFonction()
{

$nb_params = func_num_args();
$params = func_get_args();

/* fonction de nb_param tu peux avoir des traitements différents :
genre si c'est 2 tu t'attends à avoir nom en params[0] et prénom en params[1],
si c'est trois tu t attends à avoir age en params[0], sexe en params[1] et nom en params[2]

je fais exprès de donner un exemple super con (genre la méthode qui s'appelle pareil mais ne fait pas la même chose */


// traitement qui va bien pour récupérer les paramètres, les tester, etc..
// genre :
$age_du_capitaine = $params[1];
if (!is_int($age_du_capitaine) )
throw new ... /// gestion des erreurs


// a partir de la code comme d'habitude

}

Evidemment cela sous entend que :

+ si tu veux contrôler les types tu dois le faire toi même dans le code à la suite (is_int...) , de même le contrôle des paramètres nécessaires

+ tu dois commenter suffisamment la fonction pour savoir ce qui est attendu en premier, deuxième troisième paramètres, fonction des paramètres...

de ce point de vue, php est très lâche d'utilisation, mais la liberté totale n'empêche pas d'avoir le droit d'être rigoureux (ou pas du tout d'ailleurs)




RE: PHP, vos astuces pour palier à ses defauts? - Argorate - 18-09-2011

J'entends bien, mais ce qui été intéressant avec l'objet c'est que si je fais

$joueur->attaque($objet) où $objet peut être un joueur où un autre type (bâtiment, véhicule ou autre), tu n'avais pas besoin de t'en préoccuper, le switchage se faisait tout seul!
En gros je suis obliger de faire cette redirection a la main, c'est dommage. Sad
Et pour te répondre sephi, le fait que le php ne soit pas fortement typé ne devrait pas empêcher de pouvoir préciser le type et pourvoir surcharger les méthodes le cas échéant.


RE: PHP, vos astuces pour palier à ses defauts? - Ter Rowan - 18-09-2011


je ne suis pas sur que tu utilises correctement l'objet

en effet, si tu fais $a->attaque($b)

tu devrais dans la méthode attaque appeler des méthodes de $b, genre

$b->getDefense();
$b->getArmure();
$b->faisDegats($points);

etc...

grosso modo ce sont les méthodes de $b qui le spécialiseent soit en batiment, soit en joueur, etc..

il ne devrait y avoir aucune différence de code dans la méthode attaque


et sinon, pour tester le type d'un objet, tu peux utiliser is_a ou encore get_class pour connaitre sa classe exacte


RE: PHP, vos astuces pour palier à ses defauts? - Argorate - 19-09-2011

Non, le comportement ou le déroulement si tu préfères de l'attaque n'est pas le même si c'est un bâtiment ou un joueur, il y a des chose en moins avec le bâtiment. Wink
Moi je trouve ça plutôt logique, l'algorithme de combat diffère selon le type d'attaque...


RE: PHP, vos astuces pour palier à ses defauts? - niahoo - 19-09-2011

et bien tu peux tester si ton objet propose certaines méthodes et donc les appeller, sinon non.

ou alors, comme tu le dis attaquer un batiment ce n'est pas la même chose, donc avoir deux fonctions attaque au nom différent ce n'est pas grave.

Le fait que php soit faiblement typé permet de faire des cast implicites. en envoyant une chaine contenant un nombre à une méthode qui fait des calculs mathématiques, on caste la chaine en nombre sans s'en précoccupper.

Comme toi j'aimerais plutot un typage fort, mais c'est l'implicit cast est une feature du langage (perso je trouve que c'est naze car ça provoque des erreurs difficiles à débugger)

genre
echo '-'.1 - 3; // donne -4 il me semble ... la loose

mais c'est comme ça Smile donc, python a un typage fort Smile


RE: PHP, vos astuces pour palier à ses defauts? - Sephi-Chan - 19-09-2011