{"id":484,"date":"2022-04-08T16:46:38","date_gmt":"2022-04-08T14:46:38","guid":{"rendered":"https:\/\/jagullo.fr\/blog\/?p=484"},"modified":"2022-09-23T08:05:44","modified_gmt":"2022-09-23T06:05:44","slug":"les-arguments-nommes-en-php","status":"publish","type":"post","link":"https:\/\/jagullo.fr\/blog\/les-arguments-nommes-en-php\/","title":{"rendered":"Les arguments nomm\u00e9s en PHP"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Petit rappel sur les arguments des fonctions<\/h2>\n\n\n\n<p>N&rsquo;importe quel d\u00e9veloppeur PHP utilise les fonctions pour <strong>d\u00e9couper son code<\/strong> en bloc r\u00e9utilisable. Les arguments sont les variables qui sont envoy\u00e9es au moment de l&rsquo;appel d&rsquo;une fonction pour faire passer des informations \u00e0 cette derni\u00e8re. En fonction des arguments envoy\u00e9s, la fonction traitera la demande d&rsquo;une fa\u00e7on diff\u00e9rente. Pour tester la bonne programmation des fonctions, on peut r\u00e9aliser des tests unitaires ce qui permet \u00e0 un d\u00e9veloppeur de v\u00e9rifier que la fonction r\u00e9pond bien \u00e0 toutes les demandes suivant les arguments envoy\u00e9s.<\/p>\n\n\n\n<p>Les arguments nomm\u00e9s sont impl\u00e9ment\u00e9s dans de nombreux langages de programmation comme le C#, Python ou m\u00eame des posts-processeurs comme SASS. Une des nouveaut\u00e9s de PHP 8 qui rattrape son retard par rapport \u00e0 d&rsquo;autres langages de programmation c&rsquo;est donc <a href=\"https:\/\/www.php.net\/manual\/fr\/functions.arguments.php#functions.named-arguments\" target=\"_blank\" rel=\"noreferrer noopener\">les arguments nomm\u00e9s<\/a>. C&rsquo;est une fonctionnalit\u00e9 facultative et qui peut tr\u00e8s bien \u00eatre combin\u00e9e avec les arguments positionnels.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/04\/illustration_arguments-nommes_php.jpg\" alt=\"En PHP les arguments nomm\u00e9s facilitent l'appel des fonctions\" class=\"wp-image-706\" width=\"720\" height=\"480\" srcset=\"https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/04\/illustration_arguments-nommes_php.jpg 960w, https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/04\/illustration_arguments-nommes_php-300x200.jpg 300w, https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/04\/illustration_arguments-nommes_php-768x512.jpg 768w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><figcaption>Les arguments nomm\u00e9s facilitent l&rsquo;appel des fonctions<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Appeler des fonctions d&rsquo;une fa\u00e7on plus simple<\/h2>\n\n\n\n<p>Cette nouvelle fonctionnalit\u00e9 clarifie beaucoup l&rsquo;appel d&rsquo;une fonction, car nous ne sommes plus oblig\u00e9s de respecter l&rsquo;ordre des arguments. En PHP 7 il fallait d\u00e9clarer les arguments obligatoires en premier et les facultatifs \u00e0 la suite en respectant l&rsquo;ordre. Depuis PHP 8 il est possible d&rsquo;appeler directement un argument via le nom dans l&rsquo;appel de la fonction ce qui simplifie le d\u00e9veloppement.<\/p>\n\n\n\n<p>Prenons l&rsquo;exemple d&rsquo;une simple fonction helloWord qui affiche <strong>\u00ab\u00a0hello word\u00a0\u00bb<\/strong> sans d\u00e9finir d&rsquo;arguments :<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>&lt;?php\nfunction helloWord(string $arg1 = 'hello', string $arg2 = 'word'):void {\n    echo $arg1 . ' ' . $arg2 . '&lt;br&gt;';\n}\nhelloWord(); \/\/ hello word<\/code><\/pre>\n\n\n\n<p>En PHP 7 si un d\u00e9veloppeur web souhaite modifier <strong>$arg2<\/strong> il doit obligatoirement d\u00e9clarer <strong>$arg1<\/strong> dans son appel sinon cela ne fonctionne tout simplement pas. Mais depuis PHP 8 il est possible appeler directement <strong>$arg2<\/strong> sans avoir besoin de d\u00e9clarer les premiers arguments de la fonction. Il n&rsquo;est plus n\u00e9cessaire de respecter l&rsquo;ordre des arguments qui sont appel\u00e9 par la d\u00e9finition de la fonction.<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>&lt;?php\nfunction helloWord(string $arg1 = 'hello', string $arg2 = 'word'):void {\n    echo $arg1 . ' ' . $arg2 . '&lt;br&gt;';\n}\nhelloWord(arg2:'function'); \/\/ hello function<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Les changements au niveau de l&rsquo;interpr\u00e9teur<\/h2>\n\n\n\n<p>Ce nouveau principe <strong>facilite l&rsquo;utilisation des arguments<\/strong> dans les fonctions pour les d\u00e9veloppeurs PHP, mais il n\u00e9cessite quelques r\u00e8gles \u00e0 respecter. Pour fonctionner correctement, les arguments nomm\u00e9s doivent \u00eatre obligatoirement d\u00e9finis apr\u00e8s ceux positionn\u00e9s. Cette particularit\u00e9 est surtout utile si on a beaucoup d&rsquo;arguments d\u00e9clar\u00e9s dans la fonction.<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>&lt;?php\nfunction helloWord(string $arg1 = 'hello', string $arg2 = 'word'):void {\n    echo $arg1 . ' ' . $arg2 . '&lt;br&gt;';\n}\nhelloWord(arg1:'hi', 'function'); \/\/ fatal error\nhelloWord('hi', arg2: 'function'); \/\/ hi function<\/code><\/pre>\n\n\n\n<p>Le dernier changement au niveau de l&rsquo;interpr\u00e9teur concerne la famille des 3 fonctions <strong>func_num_args, func_get_args <\/strong>et<strong> func_get_arg<\/strong>. Ces 3 fonctions permettent de g\u00e9rer les arguments pass\u00e9s dans une fonction. Il faut faire attention de bien comprendre l&rsquo;impact des arguments nomm\u00e9s sur les anciennes fonctions de PHP . En effet en utilisant les arguments nomm\u00e9s ces fonctions r\u00e9agissent diff\u00e9remment et renvoient maintenant les valeurs par d\u00e9faut des arguments pr\u00e9c\u00e9dents :<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>&lt;?php\nfunction helloWord(string $arg1 = 'hello', string $arg2 = 'word'):void {\n    var_dump(func_num_args(), func_get_args());\n}\nhelloWord(); \/\/ int(0) array(0) { }\nhelloWord('hi'); \/\/ int(1) array(1) { &#91;0]=&gt; string(2) \"hi\" }\nhelloWord(arg2: 'function'); \/\/ int(2) array(2) { &#91;0]=&gt; string(5) \"hello\" &#91;1]=&gt; string(8) \"function\" }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">PHP un langage en constante \u00e9volution<\/h2>\n\n\n\n<p><strong>Les arguments nomm\u00e9s<\/strong> sont donc une excellente nouvelle fonctionnalit\u00e9 impl\u00e9ment\u00e9e dans la derni\u00e8re version majeure de PHP. Ceci permettra aux d\u00e9veloppeurs web d&rsquo;\u00e9crire du code plus simple \u00e0 maintenir et plus clair. La derni\u00e8re version de PHP incorpore de nombreuses nouvelles fonctionnalit\u00e9s comme les attributs, l&rsquo;expression match ou encore l&rsquo;initialisation des propri\u00e9t\u00e9s d&rsquo;une classe directement dans le constructeur. Les d\u00e9veloppeurs PHP ont encore beaucoup de travail pour adapter et optimiser leurs codes \u00e0 toutes ces nouveaut\u00e9s.<\/p>\n\n\n\n<p>En plus d&rsquo;apporter de nouvelles fonctionnalit\u00e9s, les versions majeures de PHP sont beaucoup plus optimis\u00e9es et s&rsquo;ex\u00e9cutent plus rapidement au niveau serveur. Il est donc important de bien mettre \u00e0 jour son environnement pour avoir des r\u00e9ponses serveur plus rapides et augmenter la vitesse de chargement du site.<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"\/blog\/wp-content\/themes\/Extra-child\/assets\/css\/prism.css\">\n<script src=\"\/blog\/wp-content\/themes\/Extra-child\/assets\/js\/prism.js\"><\/script>\n<div class=\"list-tags\"><a href=\"https:\/\/jagullo.fr\/blog\/tag\/php\/\" class=\"link-tag\" title=\"PHP\">PHP<\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>Petit rappel sur les arguments des fonctions N&rsquo;importe quel d\u00e9veloppeur PHP utilise les fonctions pour d\u00e9couper son code en bloc r\u00e9utilisable. Les arguments sont les variables qui sont envoy\u00e9es au moment de l&rsquo;appel d&rsquo;une fonction pour faire passer des informations \u00e0 cette derni\u00e8re. En fonction des arguments envoy\u00e9s, la fonction traitera la demande d&rsquo;une fa\u00e7on [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":706,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[8],"tags":[27],"class_list":["post-484","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpement","tag-php","et-has-post-format-content","et_post_format-et-post-format-standard"],"_links":{"self":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts\/484","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/comments?post=484"}],"version-history":[{"count":3,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts\/484\/revisions"}],"predecessor-version":[{"id":984,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts\/484\/revisions\/984"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/media\/706"}],"wp:attachment":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/media?parent=484"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/categories?post=484"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/tags?post=484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}