{"id":229594,"date":"2022-11-08T18:09:00","date_gmt":"2022-11-08T15:09:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229594"},"modified":"2022-11-09T08:37:27","modified_gmt":"2022-11-09T05:37:27","slug":"normes-de-codage-de-base-via-psr-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/normes-de-codage-de-base-via-psr-1\/","title":{"rendered":"Normes de codage de base via PSR-1"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/utilisation-des-psr-par-rapport-aux-normes-de-codage-wordpress\/\" title=\"Hier\" >Hier<\/a>, j&rsquo;ai parl\u00e9 bri\u00e8vement d&rsquo;une justification de l&rsquo;utilisation des <a href=\"http:\/\/www.php-fig.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR<\/a> par rapport aux <a href=\"https:\/\/codex.wordpress.org\/WordPress_Coding_Standards\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">normes de codage WordPress<\/a> et du quand et pourquoi des deux. Mais cela ne veut pas dire que ce n&rsquo;est pas sans points de confusion, surtout si vous d\u00e9butez avec eux, n&rsquo;est-ce pas\u00a0?<\/p>\n<p>Par cela, je veux dire: supposons que vous travaillez avec les normes de codage WordPress depuis des ann\u00e9es (parce que je peux comprendre) et maintenant il y a tout un nouvel ensemble de r\u00e8gles et de directives \u00e0 suivre. Mais ce n&rsquo;est pas comme une simple question de changer un espace blanc et de renommer des fichiers.<\/p>\n<p>Il y a d&rsquo;autres points \u00e0 suivre, et chacun est d\u00e9crit dans un num\u00e9ro, litt\u00e9ralement (PSR-1, PSR-2, etc.), de la fa\u00e7on dont quelque chose devrait fonctionner.<\/p>\n<p>Donc, en ce qui concerne uniquement les normes de codage de base d\u00e9crites dans PSR-1, quels sont les domaines probl\u00e9matiques que nous pouvons rencontrer en tant que d\u00e9veloppeurs WordPress\u00a0?<\/p>\n<h2>Normes de codage de base (et effets secondaires)<\/h2>\n<p>Je n&rsquo;ai pas l&rsquo;intention de parcourir chacun des documents et de ressasser ce que nous pouvons d\u00e9j\u00e0 apprendre en <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">les lisant<\/a> simplement, mais je pense qu&rsquo;il y a quelque chose \u00e0 dire pour prendre quelque chose que beaucoup d&rsquo;entre nous font ou exp\u00e9rimentent et voir comment cela pourrait changer \u00e0 l&rsquo;int\u00e9rieur le contexte de WordPress.<\/p>\n<p>Prenez les <strong>effets secondaires<\/strong> de la norme de codage de base (ou <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-1<\/a> ), par exemple\u00a0:<\/p>\n<blockquote>\n<p>Un fichier DEVRAIT d\u00e9clarer de nouveaux symboles (classes, fonctions, constantes, etc.) et ne provoquer aucun autre effet secondaire, ou il DEVRAIT ex\u00e9cuter une logique avec des effets secondaires, mais NE DEVRAIT PAS faire les deux.<\/p>\n<p>L&rsquo;expression &quot;effets secondaires&quot; signifie l&rsquo;ex\u00e9cution d&rsquo;une logique non directement li\u00e9e \u00e0 la d\u00e9claration de classes, de fonctions, de constantes, etc., simplement \u00e0 partir de l&rsquo;inclusion du fichier.<\/p>\n<\/blockquote>\n<p>Personnellement, je trouve que la deuxi\u00e8me phrase est la cl\u00e9 pour comprendre et \u00e9viter autant que possible les effets secondaires dans notre code. Autrement dit, tout ce que nos classes font doit \u00eatre autonome ou coh\u00e9rent avec quelque chose qui a pu \u00eatre inject\u00e9 d&rsquo;une mani\u00e8re ou d&rsquo;une autre.<\/p>\n<p>Quoi qu&rsquo;il en soit, trouver un code qui introduit un effet secondaire et le nettoyer ne devrait pas \u00eatre trop difficile. En fait, je vais me servir d&rsquo;exemple.<\/p>\n<p>Regardez ce <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f9de10bd98d0ba3dd22c914b01fad140#file-00-toggle-admin-notices-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">morceau de code<\/a> particulier :<\/p>\n<pre><code>&lt;?php\n\nnamespace TAN;\nuse TANAdmin;\n\ninclude_once( 'admin\/class-toggle-admin-notices-node.php' );\ninclude_once( 'admin\/interfaces\/interface-asset.php' );\ninclude_once( 'admin\/class-javascript-assets.php' );\n\nadd_action( 'plugins_loaded', __NAMESPACE__. 'tan_start' );\n\/**\n * Initializes the JavaScript loader and the Administration Bar Node for\n * rendering the option to toggle admin notices.\n *\/\nfunction tan_start() {\n  \/\/ Code removed for brevity.\n}\n<\/code><\/pre>\n<p>Ce code provient directement de <a href=\"https:\/\/tommcfarlin.com\/wordpress-admin-notices\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Toggle Admin Notices<\/a>. Certes, c&rsquo;est simple et le <a href=\"https:\/\/github.com\/tommcfarlin\/toggle-admin-notices\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">r\u00e9f\u00e9rentiel<\/a> indique comment le modifier. Cela d\u00e9montre n\u00e9anmoins le point, non?<\/p>\n<p>Quelle est la solution? Cela se pr\u00e9sente sous la forme d&rsquo;un chargement automatique (qui est \u00e9galement couvert dans <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a> ). Et si je devais le refactoriser, pour qu&rsquo;il suive correctement PSR-1\u00a0? Ensuite, une fa\u00e7on de le refactoriser peut <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f9de10bd98d0ba3dd22c914b01fad140#file-01-toggle-admin-notices-autoloading-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ressembler \u00e0 ceci<\/a>\u00a0:<\/p>\n<pre><code>&lt;?php\n\nnamespace TAN;\nuse TANAdmin;\n\ninclude_once 'inc\/autoload.php';\n\nadd_action( 'plugins_loaded', __NAMESPACE__. 'tan_start' );\n\/**\n * Initializes the JavaScript loader and the Administration Bar Node for\n * rendering the option to toggle admin notices.\n *\/\nfunction tan_start() {\n  \/\/ Code removed for brevity.\n}\n<\/code><\/pre>\n<p>Est-ce un bon exemple\u00a0? Probablement pas. Mais il ne suffit pas d&rsquo;inclure des fichiers. L&rsquo;inclusion de ces fichiers, c&rsquo;est que ce fichier unique introduit une vari\u00e9t\u00e9 d&rsquo;effets secondaires.<\/p>\n<p>Cela signifie que ce seul fichier est responsable de faire bien plus que ces quatre lignes de code. Consid\u00e9rez-le comme incorporant tout ce que les autres fichiers impl\u00e9mentent. Cela devient plus complexe \u00e0 ce moment-l\u00e0.<\/p>\n<p>Alors, prenez cette id\u00e9e et d\u00e9placez-la dans un syst\u00e8me beaucoup plus vaste et vous pouvez voir comment et pourquoi cela serait probl\u00e9matique.<\/p>\n<p>Bien s\u00fbr, il existe \u00e9galement des moyens alternatifs. Et ceci n&rsquo;est qu&rsquo;un exemple. Autod\u00e9rision aussi. Il ne s&rsquo;agit pas tant de montrer une mani\u00e8re d\u00e9finitive de le faire, mais de commencer \u00e0 semer des r\u00e9flexions sur la fa\u00e7on dont nous concevons, planifions, construisons et int\u00e9grons des classes.<\/p>\n<h3>Qu&rsquo;en est-il des vues\u00a0?<\/h3>\n<p>Quand il s&rsquo;agit d&rsquo;\u00e9crire des plugins, j&rsquo;ai tendance \u00e0 traiter ce que les utilisateurs verront comme des <strong>vues.\u00a0<\/strong>Mais il semble y avoir un hic ici: il est consid\u00e9r\u00e9 comme une mauvaise pratique d&rsquo;inclure des fichiers car cela introduit des effets secondaires.<\/p>\n<p>Nous ne voulons donc pas produire de logique dans nos classes, mais nous voulons \u00e9galement s\u00e9parer la pr\u00e9sentation de la logique m\u00e9tier.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166223-61e7906a0bf19.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-166223-61e7906a0bf19.png\" alt=\"Normes de codage de base via PSR-1\" ><\/a><\/p>\n<p>Que devons-nous faire?<\/p>\n<blockquote>\n<p>La torsion\u2026 est que nous allons utiliser la programmation orient\u00e9e objet pour le faire. Nous allons concevoir une classe qui g\u00e9n\u00e8re du HTML \u00e0 l&rsquo;aide du mod\u00e8le PHP.<\/p>\n<\/blockquote>\n<p>Cela a \u00e9t\u00e9 couvert en profondeur <a href=\"https:\/\/carlalexander.ca\/designing-class-generate-wordpress-html-content\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">par quelqu&rsquo;un d&rsquo;autre<\/a>, et je recommande fortement de lire ce post particulier pour prendre l&rsquo;id\u00e9e des effets secondaires, les \u00e9viter et incorporer autant que possible des pratiques solides.<\/p>\n<h2>\u2026 Et les actifs et les fichiers associ\u00e9s\u00a0?<\/h2>\n<p>Je sais\u00a0: l&rsquo;id\u00e9e de s&rsquo;\u00e9loigner des effets secondaires (et encore moins de les identifier) \u200b\u200bpeut \u00eatre bizarre au d\u00e9but, surtout quand on pense \u00e0 certaines choses que nous avons faites depuis si longtemps.<\/p>\n<p>Et cela peut soulever des questions telles que\u00a0: l&rsquo;inclusion de fichiers JavaScript ou de fichiers CSS est-elle incorrecte\u00a0? C&rsquo;est probablement un sujet pour un autre post. Rappelez-vous, cependant, qu&rsquo;il existe des fonctions API de base directement li\u00e9es \u00e0 cela, et elles peuvent faire partie d&rsquo;une classe strictement responsable de cela.<\/p>\n<p>Si le but d&rsquo;une classe est de faire exactement cela et seulement cela et qu&rsquo;elle utilise des fonctions API pour le faire, alors je dirais que c&rsquo;est probablement correct.<\/p>\n<p>Mais je m&rsquo;\u00e9gare l\u00e0-dessus pour l&rsquo;instant (et c&rsquo;est peut-\u00eatre un sujet pour les commentaires ou, encore une fois, un autre post).<\/p>\n<p>Au lieu de cela, gardez vos cours l\u00e9gers et utiles. Ils doivent faire comme les \u00e9tats <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-1<\/a> et \u00e9viter de faire des choses telles que &quot;[d\u00e9clarer] de nouvelles classes, fonctions, constantes, etc.&quot; et &quot;[ex\u00e9cuter] une logique avec des effets secondaires&quot;.<\/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>Gardez vos cours utiles. \u00c9vitez des choses telles que \u00ab\u00a0[d\u00e9clarer] de nouvelles classes, fonctions, constantes, etc.\u00a0\u00bb et \u00ab\u00a0[ex\u00e9cuter] une logique avec des effets secondaires\u00a0\u00bb.<\/p>\n","protected":false},"author":1,"featured_media":166224,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[717],"tags":[1167],"class_list":["post-229594","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229594","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=229594"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229594\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/166224"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}