{"id":229450,"date":"2022-11-04T09:58:00","date_gmt":"2022-11-04T06:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229450"},"modified":"2022-11-09T07:07:28","modified_gmt":"2022-11-09T04:07:28","slug":"sur-les-valeurs-immuables-dans-les-plugins-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/sur-les-valeurs-immuables-dans-les-plugins-wordpress\/","title":{"rendered":"Sur les valeurs immuables dans les plugins WordPress"},"content":{"rendered":"\n<p>Si vous avez fait des travaux &#8211; ou m\u00eame des lectures &#8211; sur la programmation orient\u00e9e objet, vous avez probablement rencontr\u00e9 l&rsquo;id\u00e9e d&rsquo;immuabilit\u00e9. C&rsquo;est l&rsquo;id\u00e9e que quelque chose est immuable.<\/p>\n<p>Parfois, vous pouvez avoir des valeurs immuables, et parfois vous pouvez avoir des objets immuables (au moins apr\u00e8s leur instanciation).<\/p>\n<p>Le contraire d&rsquo;immuable (mais c&rsquo;\u00e9tait ma tortue ninja pr\u00e9f\u00e9r\u00e9e, de toute fa\u00e7on).<\/p>\n<p>Le fait est que plus je travaille avec du code orient\u00e9 objet, moins j&rsquo;ai tendance \u00e0 travailler avec des variables immuables. Bien s\u00fbr, j&rsquo;utiliserai des constantes telles que d\u00e9finies dans un fichier de configuration, mais vous ne me trouverez probablement pas en train de stocker des valeurs dans une classe en tant que <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.constants.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">const<\/a>.<\/p>\n<p>Cela implique probablement quelque chose sur moi et mes capacit\u00e9s, mais c&rsquo;est vrai. Heureusement, <a href=\"https:\/\/tommcfarlin.com\/code-reviews\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">les r\u00e9visions de code<\/a> sont tr\u00e8s utiles pour vous aider \u00e0 voir les opportunit\u00e9s d&rsquo;exploiter des strat\u00e9gies que vous ne feriez pas normalement. Et c&rsquo;est le cas des valeurs immuables dans les plugins WordPress.<\/p>\n<p>Bien s\u00fbr, c&rsquo;est l&rsquo;une de ces choses qui a \u00e9t\u00e9 port\u00e9e \u00e0 mon attention <a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">par un ami<\/a> lors de la r\u00e9vision de mon code.<\/p>\n<p>Lorsque vous travaillez avec WordPress, beaucoup d&rsquo;entre nous connaissent probablement <strong>functions.php<\/strong> et <strong>wp-config.php<\/strong> et le r\u00f4le qu&rsquo;ils jouent dans l&rsquo;application principale de WordPress.<\/p>\n<p>Oui, il y a des moments o\u00f9 des choses appartiennent \u00e0 <strong>wp-config.php<\/strong>, et oui, il y a des moments o\u00f9 des choses appartiennent \u00e0 <strong>functions.php<\/strong>, mais parfois je pense que ce fichier particulier est abus\u00e9 avec beaucoup trop de fonctions, de valeurs, etc. .<\/p>\n<p>Mais qu&rsquo;en est-il des plugins? Plus pr\u00e9cis\u00e9ment, qu&rsquo;en est-il des plugins orient\u00e9s objet\u00a0? Par exemple, supposons que vous travaillez avec une API qui n\u00e9cessite une cl\u00e9 API, de sorte que vous ne vous heurtez pas \u00e0 une limite de d\u00e9bit particuli\u00e8re avec une version gratuite de l&rsquo;application.<\/p>\n<p>Habituellement, vous pouvez me trouver en train de stocker la valeur dans la classe principale du plug-in en tant que variable d&rsquo;instance pouvant \u00eatre transmise, ou peut-\u00eatre dans une classe de conteneur \u00e0 laquelle je peux me r\u00e9f\u00e9rer et utiliser sa\u00a0 m\u00e9thode <strong>get<\/strong>.<\/p>\n<p>Mais qu&rsquo;en est-il de l&rsquo;utilisation d&rsquo;une\u00a0 propri\u00e9t\u00e9 <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.constants.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">const<\/a> dans une classe, puis de la transmettre via une injection de setter ?<\/p>\n<p>Par exemple, supposons qu&rsquo;il existe une classe de plug-in qui s&rsquo;appuie sur une classe d&rsquo;assistance pour afficher quelque chose \u00e0 l&rsquo;\u00e9cran. La cl\u00e9 API peut \u00eatre d\u00e9finie dans cette classe puis <a href=\"https:\/\/gist.github.com\/tommcfarlin\/d588e0c45cf96bcd5f10614ccf432339#file-00-main-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pass\u00e9e dans le helper si besoin<\/a> :<\/p>\n<pre><code>&lt;?php\n\nclass Main_Plugin {\n\n  const ACME_API_KEY = '123456789';\n\n  public function init() {\n\n    $helper = new Helper_Class();\n    $helper-&gt;render_acme_data( self::ACME_API_KEY );\n  }\n}<\/code><\/pre>\n<p>Ensuite, la classe d&rsquo;assistance peut appeler l&rsquo;API arbitraire (je l&rsquo;appelle Canvas puisque nous serons hypoth\u00e9tiquement quelque chose) en utilisant son URL et transmet la cl\u00e9 API dans le cadre de la cha\u00eene de requ\u00eate.<\/p>\n<pre><code>&lt;?php\n\nclass Helper_Class {\n\n  public function render_acme_data( string $api_key) {\n\n    $canvas_url = 'https:\/\/url-for-canvas.com?api_key='. $api_key;\n    $canvas = new Canvas( $canvas_url );\n\n    $canvas-&gt;draw();\n  }\n}<\/code><\/pre>\n<p>Par ici:<\/p>\n<ul>\n<li>il y a un seul endroit o\u00f9 la valeur est conserv\u00e9e,<\/li>\n<li>il y a un nom descriptif indiquant ce qu&rsquo;il stocke,<\/li>\n<li>il peut \u00eatre pass\u00e9 \u00e0 d&rsquo;autres classes avec une d\u00e9pendance minimale,<\/li>\n<li>les autres classes peuvent s&rsquo;y r\u00e9f\u00e9rer en tant que variables locales ou en tant que variables d&rsquo;instance (selon la mani\u00e8re dont elles sont transmises).<\/li>\n<\/ul>\n<p>Bien s\u00fbr, il existe d&rsquo;autres fa\u00e7ons de conserver ces valeurs (encore une fois en utilisant <strong>functions.php<\/strong> ou quelque chose de similaire).<\/p>\n<p>Mais si vous travaillez avec de la programmation orient\u00e9e objet et que vous voulez travailler avec des valeurs immuables dans un plugin WordPress, n&rsquo;aurait-il pas de sens de le garder dans le contexte des classes qui composent le plugin ?<\/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>Les r\u00e9visions de code vous aident \u00e0 voir les opportunit\u00e9s d&rsquo;utiliser des techniques que vous pourriez manquer. C&rsquo;est le cas des valeurs immuables dans les plugins WordPress.<\/p>\n","protected":false},"author":1,"featured_media":166654,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,717,801,841,862],"tags":[1167],"class_list":["post-229450","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-developpeur","category-php-3","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229450","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=229450"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229450\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/166654"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}