{"id":229567,"date":"2022-11-08T12:17:00","date_gmt":"2022-11-08T09:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229567"},"modified":"2022-11-09T08:30:19","modified_gmt":"2022-11-09T05:30:19","slug":"eviter-les-class_exists-dans-le-code-wordpress-oriente-objet","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/eviter-les-class_exists-dans-le-code-wordpress-oriente-objet\/","title":{"rendered":"\u00c9viter les class_exists dans le code WordPress orient\u00e9 objet"},"content":{"rendered":"\n<p>Si vous \u00e9crivez du code orient\u00e9 objet pour WordPress (g\u00e9n\u00e9ralement dans le contexte de plugins), vous rencontrerez probablement une v\u00e9rification class_exists avant d&rsquo;initialiser une classe. Mais nous devrions commencer \u00e0 \u00e9viter class_exists dans une grande partie de notre code \u00e0 ce stade (\u00e0 quelques exceptions pr\u00e8s que je vais d\u00e9crire ci-dessous).<\/p>\n<p>Selon la version de PHP que vous utilisez, cela a du sens. Ou il l&rsquo;a fait \u00e0 un moment donn\u00e9. Depuis PHP 5.3.0, ce n&rsquo;est plus n\u00e9cessaire. Au lieu de cela, il est pr\u00e9f\u00e9rable d&rsquo;utiliser des espaces de noms.<\/p>\n<h2>\u00c9viter les class_exists<\/h2>\n<p>Vous pouvez voir toutes les exigences pour les diff\u00e9rentes versions de WordPress sur <a href=\"https:\/\/codex.wordpress.org\/Template:Server_requirements\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cette page<\/a>, donc si vous travaillez avec des versions h\u00e9rit\u00e9es de WordPress, l&rsquo;ensemble de la v\u00e9rification class_exists pourrait en valoir la peine.<\/p>\n<p>Il <a href=\"https:\/\/wordpress.org\/about\/requirements\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">y a quand m\u00eame une remarque importante<\/a> :<\/p>\n<blockquote>\n<p>Remarque: Si vous \u00eates dans un environnement h\u00e9rit\u00e9 o\u00f9 vous n&rsquo;avez que des versions plus anciennes de PHP ou de MySQL, WordPress fonctionne \u00e9galement avec PHP 5.2.4+ et MySQL 5.0+, mais ces versions ont atteint la fin de vie officielle et, en tant que telles, <strong>peuvent exposer votre site \u00e0 vuln\u00e9rabilit\u00e9s de s\u00e9curit\u00e9<\/strong>.<\/p>\n<\/blockquote>\n<p>Mais pour la plupart d&rsquo;entre nous, les environnements d&rsquo;h\u00e9bergement modernes prennent en charge au moins PHP 5.3.0, sinon plus, et \u00e0 cause de cela, nous n&rsquo;avons pas besoin d&rsquo;utiliser class_exists.<\/p>\n<p>Cela dit, il n&rsquo;est pas rare de voir quelque chose <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-00-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comme \u00e7a<\/a> :<\/p>\n<pre><code>&lt;?php\n\nif (! class_exists( 'My_Unique_Class')) {\n class My_Unique_Class {\n   \/\/ class implementation\n }\n}\n<\/code><\/pre>\n<p>Ou <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-01-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comme ceci<\/a> :<\/p>\n<pre><code>&lt;?php\n\nif (class_exists( 'My_Unique_Class')) {\n  return;\n}\n\nclass My_Unique_Class {\n   \/\/ class implementation\n}\n<\/code><\/pre>\n<p>Il y a des ann\u00e9es, j&rsquo;\u00e9crivais aussi du code comme celui-ci. Parfois, c&rsquo;\u00e9tait pour s&rsquo;interfacer avec une base de code pr\u00e9existante. D&rsquo;autres fois, c&rsquo;\u00e9tait parce que je ne connaissais pas mieux. Le fait est que c&rsquo;est devenu quelque chose que nous voyons dans le code bas\u00e9 sur WordPress lorsque nous n&rsquo;avons pas \u00e0 l&rsquo;utiliser.<\/p>\n<p>En fait, je dirais que nous ne devrions plus l&rsquo;utiliser.<\/p>\n<p>Mais plus vous \u00e9crivez de code et plus vous lisez de code, plus vous apprenez, n&rsquo;est-ce pas\u00a0? Cela fait partie de la raison d&rsquo;\u00eatre des espaces de noms et du chargement automatique.<\/p>\n<\/p>\n<p>Alors, comment le code ci-dessus serait-il \u00e9crit?<\/p>\n<p>Peut -\u00eatre <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-02-namespace-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comme \u00e7a<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace TomMcFarlin;\n\nclass My_Unique_Class {\n  \/\/ class implementation\n}\n<\/code><\/pre>\n<p>Pourtant, cela soul\u00e8ve la question pour certains\u00a0: comment les espaces de noms aident-ils au lieu d&rsquo;utiliser class_exists\u00a0?<\/p>\n<p>Id\u00e9alement, si la m\u00eame classe existe dans un espace de noms, il y a un probl\u00e8me avec l&rsquo;espace de noms. N&rsquo;oubliez pas que <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/espaces-de-noms-et-chargement-automatique-dans-wordpress\/\" title=\"vous pouvez consid\u00e9rer un espace de noms\">vous pouvez consid\u00e9rer un espace de noms<\/a> comme un package compos\u00e9 de pi\u00e8ces uniques. Et parce qu&rsquo;ils sont uniques, il ne devrait jamais y avoir une autre pi\u00e8ce ou, dans cette classe, une autre classe qui lui ressemble.<\/p>\n<p>\u00c0 cette fin, plut\u00f4t que d&rsquo;utiliser des v\u00e9rifications class_exists, essayez d&rsquo;utiliser des espaces de noms. Bien s\u00fbr, je ne dis pas de revenir en arri\u00e8re et de refactoriser tout votre code &#8211; je ne l&rsquo;ai pas fait &#8211; mais cela ne signifie pas que le code que j&rsquo;\u00e9cris ou que je r\u00e9vise inclut l&rsquo;utilisation ou des recommandations pour.<\/p>\n<p>C&rsquo;est un changement facile qui peut faire beaucoup pour garder le code plus facile \u00e0 lire, jonch\u00e9 de moins de conditions (un message pour une autre fois) et le garder beaucoup plus organis\u00e9.<\/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>Nous devrions commencer \u00e0 \u00e9viter class_exists dans une grande partie de notre code \u00e0 ce stade (\u00e0 quelques exceptions pr\u00e8s que je d\u00e9crirai plus tard).<\/p>\n","protected":false},"author":1,"featured_media":166297,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[717,841,862],"tags":[1167],"class_list":["post-229567","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229567","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=229567"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229567\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/166297"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}