{"id":231703,"date":"2022-12-29T17:56:00","date_gmt":"2022-12-29T14:56:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231703"},"modified":"2022-12-29T17:57:06","modified_gmt":"2022-12-29T14:57:06","slug":"ecrire-un-meilleur-code-wordpress-phpstan","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/ecrire-un-meilleur-code-wordpress-phpstan\/","title":{"rendered":"\u00c9crire un meilleur code WordPress : PHPStan"},"content":{"rendered":"\n<p>Dans l&rsquo;article le plus r\u00e9cent de cette s\u00e9rie (qui remonte certes \u00e0 un certain temps), j&rsquo;ai longuement parl\u00e9 de <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/outils-pour-ecrire-un-meilleur-code-wordpress-composer\/\" title=\"Composer\">Composer<\/a> et de <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/meilleur-code-wordpress-le-fichier-de-verrouillage-du-compositeur\/\" title=\"son fichier de verrouillage.\">son fichier de verrouillage.<\/a><\/p>\n<p>Je recommande de lire les deux articles pr\u00e9c\u00e9dents car Composer va \u00e9ventuellement jouer un r\u00f4le dans ce mat\u00e9riel que cet article et les futurs articles vont partager. Mais si vous choisissez de ne pas les rattraper (ou si vous connaissez d\u00e9j\u00e0 Composer), l&rsquo;essentiel des articles pr\u00e9c\u00e9dents est respectivement le suivant\u00a0:<\/p>\n<blockquote>\n<p>Je ne recommande pas de v\u00e9rifier le r\u00e9pertoire du fournisseur dans votre r\u00e9f\u00e9rentiel. Cela peut devenir un \u00e9norme r\u00e9pertoire plus tard, et cela peut saper tout l&rsquo;objectif de Composer.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/outils-pour-ecrire-un-meilleur-code-wordpress-composer\/\" title=\"Compositeur\">Compositeur<\/a><\/p>\n<p>L&rsquo;objectif est de s&rsquo;assurer que tout le monde ex\u00e9cute la m\u00eame version des d\u00e9pendances du projet &#8211; pas des versions plus anciennes, pas des versions plus r\u00e9centes &#8211; mais la m\u00eame version.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/meilleur-code-wordpress-le-fichier-de-verrouillage-du-compositeur\/\" title=\"Le fichier de verrouillage du compositeur\">Le fichier de verrouillage du compositeur<\/a><\/p>\n<\/blockquote>\n<p>Cela dit, il existe de nombreuses d\u00e9pendances ou packages que nous pouvons installer et qui nous aident \u00e0 nous assurer que nous \u00e9crivons le code de la plus haute qualit\u00e9 possible.<\/p>\n<p>Bien s\u00fbr, certaines d&rsquo;entre elles peuvent prendre la forme de quelque chose comme des normes de codage, mais ce sont vraiment plus de r\u00e8gles que d&rsquo;\u00e9l\u00e9ments d&rsquo;\u00e9criture de code de haute qualit\u00e9 (bien que je ne pense pas qu&rsquo;elles devraient \u00eatre exclues de la discussion &#8211; juste laiss\u00e9es de c\u00f4t\u00e9 en ce moment \ud83d\ude43).<\/p>\n<p>Revenons aux outils en question: Quels sont les outils qui aident \u00e0 \u00e9crire du code WordPress de haute qualit\u00e9? Je vais partager quelques-uns de mes favoris et je vais parler de la fa\u00e7on dont nous pouvons tous les ex\u00e9cuter sur une base de code.<\/p>\n<p>Tout d&rsquo;abord, regardons l&rsquo;analyse statique avec <a href=\"https:\/\/github.com\/phpstan\/phpstan\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPStan<\/a>.<\/p>\n<h2>Meilleur code WordPress avec PHPStan<\/h2>\n<h3>Qu&rsquo;est-ce que l&rsquo;analyse statique, de toute fa\u00e7on\u00a0?<\/h3>\n<p>Tout d&rsquo;abord, quelques mots sur l&rsquo;analyse statique. A savoir, qu&rsquo;est-ce que c&rsquo;est? C&rsquo;est une bouch\u00e9e, pour une chose:<\/p>\n<blockquote>\n<p>L&rsquo;analyse de code statique (\u00e9galement connue sous le nom d&rsquo;analyse de code source) est g\u00e9n\u00e9ralement effectu\u00e9e dans le cadre d&rsquo;une r\u00e9vision de code (\u00e9galement connue sous le nom de test de bo\u00eete blanche) et est effectu\u00e9e lors de la phase de mise en \u0153uvre d&rsquo;un cycle de vie de d\u00e9veloppement de s\u00e9curit\u00e9 (SDL).<\/p>\n<p>L&rsquo;analyse de code statique fait g\u00e9n\u00e9ralement r\u00e9f\u00e9rence \u00e0 l&rsquo;ex\u00e9cution d&rsquo;outils d&rsquo;analyse de code statique qui tentent de mettre en \u00e9vidence d&rsquo;\u00e9ventuelles vuln\u00e9rabilit\u00e9s dans le code source \u00abstatique\u00bb (non en cours d&rsquo;ex\u00e9cution) en utilisant des techniques telles que l&rsquo;analyse des taches et l&rsquo;analyse des flux de donn\u00e9es.<\/p>\n<p><a href=\"https:\/\/www.owasp.org\/index.php\/Static_Code_Analysis\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Analyse de code statique via OWASP<\/a><\/p>\n<\/blockquote>\n<p>Pensez-y de cette fa\u00e7on\u00a0: c&rsquo;est un moyen d&rsquo;analyser un programme pour d\u00e9tecter les erreurs potentielles que vous ne pouvez pas voir lorsque vous travaillez sur la base de code.<\/p>\n<p>C&rsquo;est-\u00e0-dire qu&rsquo;il y a des probl\u00e8mes, des bogues, des probl\u00e8mes de s\u00e9curit\u00e9, qui peuvent \u00eatre pr\u00e9sents mais que vous ne pouvez pas d\u00e9tecter pour un certain nombre de raisons (dont la moindre est que vous \u00eates trop proche du code).<\/p>\n<p>Au fil du temps, cependant, la communaut\u00e9 du d\u00e9veloppement a appris \u00e0 analyser le code, \u00e0 g\u00e9n\u00e9rer des ensembles de r\u00e8gles et \u00e0 cr\u00e9er des outils pour aider \u00e0 trouver exactement tout ce qui pr\u00e9c\u00e8de.<\/p>\n<h3>Analyse statique du code centr\u00e9 sur WordPress<\/h3>\n<p>Et c&rsquo;est l\u00e0 que PHPStan entre en jeu.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159518-61e6f6b3d2b7f.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159518-61e6f6b3d2b7f.png\" alt=\"\u00c9crire un meilleur code WordPress : PHPStan\"><\/a><\/p>\n<p>Comme mentionn\u00e9, l&rsquo;objectif du package est d&rsquo;identifier les erreurs ou bogues qui existent dans votre code avant que votre code ne soit utilis\u00e9 par quelqu&rsquo;un d&rsquo;autre que les d\u00e9veloppeurs, de les mettre en \u00e9vidence et de vous donner la possibilit\u00e9 de les corriger.<\/p>\n<p>\u00c9tant donn\u00e9 que des outils comme celui-ci examinent une base de code (par opposition \u00e0 l&rsquo;ex\u00e9cution du code), il n&rsquo;est pas toujours possible d&rsquo;obtenir une image claire. Cela signifie que nous pouvons obtenir des faux positifs.<\/p>\n<p>Plus \u00e0 ce sujet dans un instant cependant.<\/p>\n<p>Si vous souhaitez commencer \u00e0 ex\u00e9cuter PHPStan sur votre base de code, c&rsquo;est facile. Apr\u00e8s l&rsquo;avoir install\u00e9, n&rsquo;oubliez pas de le configurer pour qu&rsquo;il ne regarde pas dans le <code>vendor<\/code>r\u00e9pertoire ou, par exemple, dans le noyau WordPress.<\/p>\n<p>Au lieu de cela, demandez-lui d&rsquo;examiner votre code.<\/p>\n<h3>Installation de PHPStan<\/h3>\n<p>Tout d&rsquo;abord, dans votre <code>composer.json<\/code>fichier, ajoutez la ligne suivante dans la <code>require-dev<\/code>section\u00a0:<\/p>\n<p><code>\"phpstan\/phpstan\": \"^0.11.12\"<\/code><\/p>\n<p>Ex\u00e9cutez ensuite <code>composer update<\/code>dans votre terminal.<\/p>\n<p>Une fois install\u00e9, vous pouvez l&rsquo;ex\u00e9cuter sur un fichier individuel, un r\u00e9pertoire ou un ensemble de r\u00e9pertoires. Si vous avez lu mes articles pr\u00e9c\u00e9dents sur l&rsquo;organisation du code, alors vous savez que je suis fan de conserver la majorit\u00e9 du code source du projet <code>src<\/code>pour que vous puissiez ex\u00e9cuter quelque chose comme ceci\u00a0:<\/p>\n<p><code>$ vendor\/bin\/phpstan analyse src<\/code><\/p>\n<p>Cela g\u00e9n\u00e9rera une sortie bas\u00e9e sur ce que l&rsquo;utilitaire trouve.<\/p>\n<p>Rappelez-vous plus t\u00f4t quand j&rsquo;ai dit qu&rsquo;il pouvait trouver des choses telles que des faux positifs\u00a0? Voici un aper\u00e7u plus d\u00e9taill\u00e9 de ce que vous pouvez voir\u00a0:<\/p>\n<ul>\n<li>Arguments suppl\u00e9mentaires pass\u00e9s aux fonctions (par exemple, la fonction n\u00e9cessite deux arguments, le code en passe trois)<\/li>\n<li>Arguments suppl\u00e9mentaires pass\u00e9s aux fonctions print\/sprintf (par exemple, la cha\u00eene de format contient un espace r\u00e9serv\u00e9, le code passe deux valeurs \u00e0 remplacer)<\/li>\n<li>Erreurs \u00e9videntes dans le code mort<\/li>\n<li>Comportement magique qui doit \u00eatre d\u00e9fini.<\/li>\n<\/ul>\n<p>Tout ce qui pr\u00e9c\u00e8de directement depuis le <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">r\u00e9f\u00e9rentiel<\/a>.<\/p>\n<p>C&rsquo;est l\u00e0 que les <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12#rule-levels\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">niveaux de r\u00e8gle<\/a> peuvent faire toute la diff\u00e9rence, m\u00eame si cela peut n\u00e9cessiter quelques ajustements pour l&rsquo;amener \u00e0 un niveau qui convient parfaitement \u00e0 votre \u00e9quipe ou \u00e0 votre projet.<\/p>\n<h3>Qu&rsquo;en est-il de l&rsquo;analyse pour WordPress ?<\/h3>\n<p>Viktor Sz\u00e9pe a partag\u00e9 <a href=\"https:\/\/packagist.org\/packages\/szepeviktor\/phpstan-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cette ressource<\/a> avec moi (quelque chose dont il est l&rsquo;auteur, en fait) et je pense que c&rsquo;est quelque chose de pertinent et d&rsquo;utile. L&rsquo;id\u00e9e du pack est simple :<\/p>\n<blockquote>\n<p>Il r\u00e9sout tous les probl\u00e8mes que j&rsquo;ai rencontr\u00e9s lors de l&rsquo;analyse du code pour WordPress.<\/p>\n<\/blockquote>\n<p>Pas mal, non ?<\/p>\n<h2>Analysez votre code<\/h2>\n<p>Quel que soit votre projet, l&rsquo;organisation de votre code ou le niveau auquel vous ex\u00e9cutez cet utilitaire particulier, le but est toujours d&rsquo;am\u00e9liorer le niveau de qualit\u00e9 du code WordPress que nous \u00e9crivons.<\/p>\n<p>L&rsquo;installer en tant que package Composer, puis l&rsquo;ex\u00e9cuter sur votre <code>src<\/code>r\u00e9pertoire est un pas dans la bonne direction.<\/p>\n<p>Comme indiqu\u00e9 pr\u00e9c\u00e9demment, je vais partager quelques autres outils et je vais ensuite partager comment les ex\u00e9cuter tous sur une base de code avant de valider le code dans un r\u00e9f\u00e9rentiel.<\/p>\n<h3>Noter<\/h3>\n<p>Si vous rencontrez un probl\u00e8me lors de la configuration du package, <a href=\"https:\/\/davemackey.net\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Dave Mackey<\/a> m&rsquo;a contact\u00e9 avec un probl\u00e8me similaire et sa <a href=\"https:\/\/github.com\/szepeviktor\/phpstan-wordpress\/issues\/8\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">solution<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Revenons aux outils en question : Quels sont les outils qui aident \u00e0 \u00e9crire du code WordPress de haute qualit\u00e9 ? Commen\u00e7ons par PHPStan.<\/p>\n","protected":false},"author":1,"featured_media":236988,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,780,748,801,841],"tags":[1167],"class_list":["post-231703","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-logiciels-open-source","category-open-source-projektmanagement-2","category-php-3","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231703","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=231703"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231703\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/236988"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}