{"id":63,"date":"2008-04-04T10:15:28","date_gmt":"2008-04-04T08:15:28","guid":{"rendered":"http:\/\/nyams.planbweb.com\/blog\/?p=63"},"modified":"2008-04-04T10:15:28","modified_gmt":"2008-04-04T08:15:28","slug":"yen-a-marre-des-fonctions-a-2356-parametres","status":"publish","type":"post","link":"https:\/\/nyamsprod.com\/blog\/yen-a-marre-des-fonctions-a-2356-parametres\/","title":{"rendered":"Y&#8217;en a marre des fonctions a 2356 param\u00e8tres"},"content":{"rendered":"<div class=\"message warning\">\n<p><strong>Attention:<\/strong> Les informations de ce billet sont susceptibles d'&ecirc;tre obsol&egrave;tes car vieux de plus 2 ans.<\/p>\n<p><strong>Warning: <\/strong> The information you are reading may be obsolete, this post was published more than 2 years ago.<\/p>\n<\/div><p>Tout bon codeur a \u00e9t\u00e9 un jour un boulet comme tout <a title=\"Comment devenir un Espada lorsque l'on est un hollow\" lang=\"fr\" rel=\"external\" href=\"http:\/\/bleach.wikia.com\/wiki\/Hollow\">Espada a \u00e9t\u00e9 un jour un Hollow<\/a>, Wouah la r\u00e9f\u00e9rence qui tue!! Je viens de tomber sur le code du premier site en PHP que j&#8217;ai cod\u00e9 il y a plus ou moins 10 ans. Et c&#8217;est vraiment pas beau \u00e0 voir\/lire. Pire, je suis incapable de comprendre qui fait quoi car il faut croire qu&#8217;\u00e0 l&#8217;\u00e9poque le mot documentation \u00e9tait tabou chez moi \ud83d\ude42 . Bref pourquoi je parle de nostalgie et de coup de gueule, c&#8217;est parce que 10 ans plus tard je retrouve dans certaines applications dites \u00e9volu\u00e9es les m\u00eame erreurs de jeunesse de mon code et \u00e7a me fout les boules.<!--more--><\/p>\n<p>Je vais prendre en exemple une fonction de mon vieux site dont j&#8217;ai honte. Attention vous allez avoir mal au yeux :<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">$found_users = search_users( $str_region=NULL, $str_type=NULL, $int_ageInf=18, $int_ageSup=100, $bool_icon=false , $int_start=0, $int_viewsize=10, $str_pseudo=NULL, $gender=&#039;mal&#039;);<\/pre>\n<p>Rien qu&#8217;en lisant l&#8217;appel \u00e0 cette fonction on sait ce qu&#8217;elle fait. Elle permet la recherche de personnes selon des crit\u00e8res sp\u00e9cifiques. Pourquoi ce code est pourri ? Parce que si sur le papier c&#8217;est sympa de  lister tous les crit\u00e8res, \u00e0 l&#8217;utilisation cette fonction est tous sauf intuitive. Cette fonction poss\u00e8de 9 arguments dans un ordre pr\u00e9cis. Chaque argument vient avec des conditions sp\u00e9cifiques. Bref c&#8217;est la gal\u00e8re pour utiliser cette fonction en production. Vous serez toujours obliger de faire appel \u00e0 votre documentation, si vous en avez une, pour conna\u00eetre ne serait-ce que l&#8217;ordre des arguments de la fonction. Bref ce type de fonction est \u00e0 proscrire. C&#8217;est pourquoi si je devais mettre \u00e0 jour cette fonction, voici comment \u00e9voluerait l&#8217;appel \u00e0 cette fonction :<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">$search_params = array(\n&#039;region&#039; =&gt; NULL ,\n&#039;type&#039; =&gt; NULL ,\n&#039;age&#039; =&gt; array( &#039;inf&#039; =&gt; 18 , &#039;sup&#039; =&gt; 100) ,\n&#039;icon&#039; =&gt; false,\n&#039;start&#039; =&gt; 0 ,\n&#039;viewsize&#039; =&gt; 10,\n&#039;pseudo&#039; =&gt; NULL,\n&#039;gender&#039; =&gt; &#039;mal&#039;\n);\n$found_users = search_users ( $search_params );<\/pre>\n<p>Et oui maintenant, il n&#8217;y a plus qu&#8217;un seul param\u00e8tre et c&#8217;est un tableau ou array. Ce tableau contient n champs associatifs qui reprennent les param\u00e8tres de la premi\u00e8re fonction. La fonction pourra \u00e9voluer et se voir ajouter ou retirer autant de param\u00e8tres que l&#8217;on veut sans porter pr\u00e9judice \u00e0 son utilisation \u00e0 travers le site. Seul le code interne de la fonction sera modifi\u00e9 en fonction de c&#8217;es ajout et ou retrait de valeur. C&#8217;est la m\u00eame approche que semble utiliser certaines <a title=\"Exemple d'un template_tags qui utilise cette m\u00e9thode\" lang=\"en\" rel=\"external\" href=\"http:\/\/codex.wordpress.org\/Template_Tags\/wp_list_bookmarks\"><em>template_tags<\/em> de WordPress<\/a> sauf qu&#8217;au lieu de soumettre un tableau, concept peut-\u00eatre trop difficile pour un designer et\/ou une personne qui veut juste jouer avec son th\u00e8me, on soumet <em>une requ\u00eate HTTP<\/em> \u00e0 la fonction. Je suppose que d\u00e8s lors la premi\u00e8re action des fonctions <em>WordPress<\/em> appel\u00e9es de cette mani\u00e8re est d&#8217;utiliser la fonction <a title=\"comment utiliser la fonction parse_str\" lang=\"fr\" rel=\"external\" href=\"http:\/\/www.php.net\/manual\/fr\/function.parse-str.php\"><code>parse_str<\/code><\/a> de PHP qui transforme en tableau une requ\u00eate HTTP et la fonction se retrouve alors dans les m\u00eame conditions avantageuses que la nouvelle version de ma fonction CQFD \ud83d\ude09 .<\/p>\n<p><strong>Pour conclure, cette astuce est utilisable en dehors du PHP, ainsi, en Javascript , on substituera le tableau associatif de PHP par une variable Javascript de type objet.<\/strong> Cette modification ne doit pas vous faire oublier de v\u00e9rifier dans votre fonction les donn\u00e9es qui lui sont envoy\u00e9es, et l\u00e0 encore le faire d&#8217;envoyer un tableau associatif ou un objet rend cette tache beaucoup plus facile. Cette astuce est \u00e0 r\u00e9server aux fonctions de plus de 3 arguments. Mais \u00e7a c&#8217;est mon avis personnel.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Conseil pour jeunes codeurs PHP\/Javascript sur comment \u00e9crire les arguments de vos fonctions pour rendre votre code plus lisible est mieux maintenable<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[5],"tags":[41,43,48,128,215,258,409,412,574,582],"class_list":["post-63","post","type-post","status-publish","format-standard","hentry","category-web","tag-arguments","tag-array","tag-astuces","tag-coup-de-gueule","tag-function","tag-http","tag-parse_str","tag-php","tag-wordpress","tag-yen-a-marre"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts\/63","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/comments?post=63"}],"version-history":[{"count":0,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/posts\/63\/revisions"}],"wp:attachment":[{"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/media?parent=63"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/categories?post=63"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nyamsprod.com\/blog\/wp-json\/wp\/v2\/tags?post=63"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}