{"id":229943,"date":"2022-11-08T12:30:00","date_gmt":"2022-11-08T09:30:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229943"},"modified":"2022-11-09T19:23:43","modified_gmt":"2022-11-09T16:23:43","slug":"evitare-class_exists-nel-codice-wordpress-orientato-agli-oggetti","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/evitare-class_exists-nel-codice-wordpress-orientato-agli-oggetti\/","title":{"rendered":"Evitare class_exists nel codice WordPress orientato agli oggetti"},"content":{"rendered":"\n<p>Se scrivi codice orientato agli oggetti per WordPress (di solito nel contesto dei plugin), \u00e8 probabile che ti imbatti in un controllo class_exists prima di inizializzare una classe. Ma a questo punto dovremmo iniziare a evitare class_exists in gran parte del nostro codice (con alcune eccezioni che illustrer\u00f2 di seguito).<\/p>\n<p>A seconda della versione di PHP che stai utilizzando, questo ha senso. O lo ha fatto una volta. A partire da PHP 5.3.0, questo non \u00e8 necessario. Invece, \u00e8 una pratica migliore usare gli spazi dei nomi.<\/p>\n<h2>Evitando class_exists<\/h2>\n<p>Puoi vedere tutti i requisiti per varie versioni di WordPress in <a href=\"https:\/\/codex.wordpress.org\/Template:Server_requirements\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">questa pagina<\/a>, quindi se stai lavorando con versioni legacy di WordPress, l&#8217;intero controllo class_exists potrebbe valerne la pena.<\/p>\n<p>Tuttavia, <a href=\"https:\/\/wordpress.org\/about\/requirements\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">c&#8217;\u00e8 una nota importante<\/a> :<\/p>\n<blockquote>\n<p>Nota: se ti trovi in \u200b\u200bun ambiente legacy in cui hai solo versioni precedenti di PHP o MySQL, WordPress funziona anche con PHP 5.2.4+ e MySQL 5.0+, ma queste versioni hanno raggiunto la fine del ciclo di vita ufficiale e come tali <strong>potrebbero esporre il tuo sito a vulnerabilit\u00e0 di sicurezza<\/strong>.<\/p>\n<\/blockquote>\n<p>Ma per la maggior parte di noi, i moderni ambienti di hosting supportano almeno PHP 5.3.0, se non superiore, e per questo motivo non \u00e8 necessario utilizzare class_exists.<\/p>\n<p>Detto questo, non \u00e8 raro vedere qualcosa del <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-00-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">genere<\/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>O <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-01-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cos\u00ec<\/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>Anni fa, scrivevo anche codice come questo. A volte doveva interfacciarsi con una base di codice preesistente. Altre volte era perch\u00e9 non sapevo niente di meglio. Il fatto \u00e8 che questo \u00e8 diventato qualcosa che vediamo nel codice basato su WordPress quando non dobbiamo usarlo.<\/p>\n<p>In effetti, direi che non dovremmo usarlo pi\u00f9.<\/p>\n<p>Ma pi\u00f9 codice scrivi e pi\u00f9 codice leggi, pi\u00f9 impari, giusto? Questo fa parte dell&#8217;intero motivo per gli spazi dei nomi e il caricamento automatico.<\/p>\n<\/p>\n<p>Quindi come verrebbe scritto il codice sopra?<\/p>\n<p>Forse <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-02-namespace-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cos\u00ec<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace TomMcFarlin;\n\nclass My_Unique_Class {\n  \/\/ class implementation\n}\n<\/code><\/pre>\n<p>Tuttavia, questo solleva la domanda per alcuni: in che modo gli spazi dei nomi aiutano invece di usare class_exists?<\/p>\n<p>Idealmente, se la stessa classe esiste all&#8217;interno di uno spazio dei nomi, c&#8217;\u00e8 un problema con lo spazio dei nomi. Ricorda che <a href=\"https:\/\/wordpress.mediadoma.com\/it\/spazi-dei-nomi-e-caricamento-automatico-in-wordpress\/\" title=\"puoi pensare a uno spazio dei nomi\">puoi pensare a uno spazio dei nomi<\/a> come a un pacchetto composto da pezzi unici. E poich\u00e9 sono unici, non dovrebbe mai esserci un altro pezzo o, in questa classe, un&#8217;altra classe uguale.<\/p>\n<p>A tal fine, anzich\u00e9 utilizzare i controlli class_exists, mira a utilizzare gli spazi dei nomi. Ovviamente, non sto dicendo di tornare indietro e refactoring di tutto il codice &#8211; non l&#8217;ho fatto &#8211; ma ci\u00f2 non significa che il codice che scrivo o rivedo includa l&#8217;uso o i consigli per cui.<\/p>\n<p>\u00c8 una modifica semplice che pu\u00f2 fare molto per mantenere il codice pi\u00f9 facile da leggere, disseminato di meno condizionali (un post per un&#8217;altra volta) e mantenerlo molto pi\u00f9 organizzato.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dovremmo iniziare a evitare class_exists in gran parte del nostro codice a questo punto (con alcune eccezioni che illustrer\u00f2 pi\u00f9 avanti).<\/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":[720,844,865],"tags":[1168],"class_list":["post-229943","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229943","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=229943"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229943\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/166297"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229943"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229943"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}