{"id":229553,"date":"2022-10-29T09:15:00","date_gmt":"2022-10-29T06:15:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229553"},"modified":"2022-11-09T08:26:40","modified_gmt":"2022-11-09T05:26:40","slug":"spazi-dei-nomi-e-caricamento-automatico-in-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/spazi-dei-nomi-e-caricamento-automatico-in-wordpress\/","title":{"rendered":"Spazi dei nomi e caricamento automatico in WordPress"},"content":{"rendered":"\n<p>La scorsa settimana ho tenuto la mia presentazione al <a href=\"https:\/\/2017.atlanta.wordcamp.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordCamp Atlanta<\/a> su Namespaces e Autoloading. (il titolo completo era Namespaces, Autoloading e Improving Plugin Architecture ma \u00e8 un boccone, vero?)<\/p>\n<p>A causa della natura del discorso, ho scelto di scrivere un post per accompagnare il post, condividere le diapositive e condividere un plug-in di esempio GitHub per supportare il discorso.<\/p>\n<p>Quindi, se eri presente, grazie (!) ed ecco il post, l&#8217;avevo promesso. E per quelli di voi che non hanno partecipato, spero che questo post aiuti ancora a dimostrare i concetti e gli argomenti <a href=\"https:\/\/tommcfarlin.com\/wordcamp-atlanta-2017\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">che ho discusso al WordCamp<\/a>.<\/p>\n<h2>Spazi dei nomi e caricamento automatico<\/h2>\n<p>Prima di parlare di namespace e caricamento automatico in WordPress, il motivo per cui voglio parlarne \u00e8 perch\u00e9 pu\u00f2 avere un impatto diretto sulla qualit\u00e0 del tuo codice e pu\u00f2 farlo per mesi e anni a venire.<\/p>\n<p>Dopotutto, molti di noi sviluppatori non fanno gi\u00e0 la domanda:<\/p>\n<blockquote>\n<p>Come possiamo rendere il nostro codice migliore di quello che gi\u00e0 \u00e8?<\/p>\n<\/blockquote>\n<p>E molti di noi sono abbastanza intelligenti da sapere ci\u00f2 che non sappiamo. Quindi ci troviamo di fronte a lavorare entro i vincoli che ci vengono dati.<\/p>\n<p>A volte abbiamo tempo per indagare sui modi per farlo; altre volte, lavoriamo con la conoscenza che abbiamo. E non c&#8217;\u00e8 niente di sbagliato in questo.<\/p>\n<p>Ma poich\u00e9 sappiamo ci\u00f2 che non sappiamo, sappiamo che c&#8217;\u00e8 il potenziale per di pi\u00f9.<\/p>\n<h3>Primo, il tuo codice<\/h3>\n<p>Quando si tratta di parlare di argomenti come gli spazi dei nomi e il caricamento automatico nel contesto di WordPress, penso che incontriamo spesso risposte contrastanti.<\/p>\n<p>Dopotutto, potremmo parlare di cose come <a href=\"https:\/\/codex.wordpress.org\/Theme_Customization_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">The Theme Customizer<\/a> o l&#8217; <a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">API REST<\/a> o qualcosa di pi\u00f9 divertente.<\/p>\n<p>Voglio dire, &quot;spazi dei nomi e caricamento automatico&quot; semplicemente non suona eccitante o all&#8217;avanguardia rispetto alle nuove funzionalit\u00e0 e tecnologie disponibili, giusto?<\/p>\n<p>Ma no, non sono proprio noiosi. E attraverso questo post e la presentazione e il codice sorgente di accompagnamento, ti mostrer\u00f2 perch\u00e9 e come non lo sono.<\/p>\n<h4>Non sono noiosi<\/h4>\n<p>Penso sia giusto dire che gli sviluppatori \u2013 almeno una parte di noi o una parte di loro a seconda di come ti vedi \u2013 sono famosi per litigare sugli aspetti della programmazione.<\/p>\n<p>&quot;Comunque conversazione noiosa.&quot;<\/p>\n<p>In effetti, non \u00e8 affatto raro sentire qualcuno discutere sul modo migliore per inizializzare e scrivere un ciclo for che sia il pi\u00f9 performante possibile quando si esegue l&#8217;iterazione su un piccolo set di database nonostante il fatto che abbiamo processori quad-core e 16 GB di RAM nelle nostre macchine desktop.<\/p>\n<p>Quindi, se ci preoccupiamo cos\u00ec tanto di qualcosa di cos\u00ec piccolo, sicuramente ci preoccupiamo del quadro pi\u00f9 ampio. Cose come:<\/p>\n<ul>\n<li>Codice migliorato<\/li>\n<li>Migliore organizzazione<\/li>\n<li>Maggiore manutenibilit\u00e0<\/li>\n<li>Debug pi\u00f9 semplice<\/li>\n<li>Fare pi\u00f9 soldi (beh, forse).<\/li>\n<\/ul>\n<p>E gli spazi dei nomi e il caricamento automatico possono portare direttamente a tutto quanto sopra (beh, non posso parlare di soldi, ma ha del potenziale).<\/p>\n<p>Se dovessi riassumere gli spazi dei nomi dei ruoli e il luogo di caricamento automatico in tutto quanto sopra, direi che:<\/p>\n<p>Gli spazi dei nomi e il caricamento automatico portano a un codice migliorato attraverso una migliore organizzazione, compartimentazione o modularizzazione e relazioni pi\u00f9 strette attraverso i loro concetti.<\/p>\n<p>Inoltre, ci\u00f2 aumenta la manutenibilit\u00e0 perch\u00e9 il codice \u00e8 organizzato in pacchetti che possono portare a un debug pi\u00f9 semplice man mano che il prodotto cresce.<\/p>\n<p>Tutto ci\u00f2 pu\u00f2 comportare un risparmio di tempo o un migliore utilizzo del tempo, che, a seconda del modello di business, pu\u00f2 influire sui profitti.<\/p>\n<p>Ma questo ancora non descrive nessuna di queste cose. Ma sicuramente, a questo punto, suonano pi\u00f9 interessanti di quando furono introdotti per la prima volta.<\/p>\n<h4>Allora, cosa sono?<\/h4>\n<p>Prima di entrare nelle definizioni di ciascuno e dei ruoli che svolgono, diamo un&#8217;occhiata a come la mancanza di spazi dei nomi e il caricamento automatico in WordPress ha avuto un impatto negativo sulla tua esperienza quando utilizzi temi, plug-in, componenti aggiuntivi o qualsiasi altra cosa tu abbia.<\/p>\n<p>Quindi torniamo indietro per un momento e osserviamo ciascuno di essi individualmente.<\/p>\n<h5>Spazi dei nomi<\/h5>\n<p>Immagina di aver ereditato un progetto e di iniziare a lavorarci. Supponiamo che sia un plugin per WordPress.<\/p>\n<p>Tu lo installi; vai ad attivarlo e poi ti viene dato almeno uno di questi:<\/p>\n<ul>\n<li>Forse vedi quel brutto messaggio di organizzazione nella parte superiore della finestra del browser che mostra una traccia dello stack.<\/li>\n<li>Forse vedi un messaggio che parla di qualche conflitto con un altro pacchetto esistente.<\/li>\n<li>O forse quando provi ad attivare un plugin, la pagina si aggiorna ma il plugin non si attiva.<\/li>\n<li>Forse hai anche eseguito un controllo del codice e vedi i controlli class_exists in tutta la base di codice.<\/li>\n<\/ul>\n<p>Qualsiasi o tutto quanto sopra pu\u00f2 contribuire a problemi, ovviamente, con i progetti WordPress. Ma gli spazi dei nomi possono davvero risolvere molto di questo la maggior parte delle volte.<\/p>\n<p>Cio\u00e8, il motivo per cui stai riscontrando questi problemi \u00e8 che il codice con cui stai lavorando fa tutto parte dello spazio dei nomi globale (rispetto al suo spazio dei nomi) e PHP non piace quando ci sono classi e moduli con lo stesso nome .<\/p>\n<p>Ma quando lo spazio dei nomi qualcosa, gli dai la sua area relativa a se stesso che funzioner\u00e0 comunque bene con altri componenti anche se hanno lo stesso nome di classe.<\/p>\n<h5>Caricatori automatici<\/h5>\n<p>Per quanto riguarda i caricatori automatici, in qualche modo sono un po&#8217; meno complicati. Per prima cosa, pensa al codice che scrivi o al codice con cui lavori, specialmente nel contesto dei plugin di WordPress, e poi pensa a quante volte scrivi o vedi quanto segue:<\/p>\n<ul>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.include.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">includere<\/a><\/li>\n<li>includere_una volta<\/li>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.require.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">richiedere<\/a><\/li>\n<li>richiedono_una volta<\/li>\n<\/ul>\n<p>E a volte li vedi nella parte superiore del file che avvia il plug-in, ea volte li vedi sparsi nella codebase.<\/p>\n<p>Se sono tutti contenuti in un unico file, non \u00e8 cos\u00ec male perch\u00e9 almeno sai dove si trovano. Ma se sono disseminati dappertutto, non hai idea di dove venga introdotta una dipendenza nel sistema.<\/p>\n<p>Il caricamento automatico pu\u00f2 risolvere tutto questo caricando le dipendenze quando necessario (e per coloro che sono interessati, il caricamento automatico \u00e8 pi\u00f9 veloce dell&#8217;inclusione manuale).<\/p>\n<h2>Spazi dei nomi<\/h2>\n<p>Detto questo, siamo pronti a parlare sia degli <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">spazi dei nomi<\/a> che del caricamento automatico. Ma gli spazi dei nomi sono il concetto fondamentale, quindi inizieremo da l\u00ec.<\/p>\n<p>Ma dopo tutto quanto sopra, puoi vedere i vantaggi del loro utilizzo. Forse sono anche divertenti, giusto? Forse?<\/p>\n<p>Indipendentemente da ci\u00f2, abbiamo bisogno di una definizione su cui possiamo lavorare quando ne parleremo per il resto dell&#8217;articolo.<\/p>\n<p>Il manuale PHP <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.rationale.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fornisce la seguente definizione<\/a> :<\/p>\n<blockquote>\n<p>I namespace sono progettati per risolvere due problemi che gli autori di librerie e applicazioni incontrano durante la creazione di elementi di codice riutilizzabili come classi o funzioni&#8230;<\/p>\n<\/blockquote>\n<p>E non \u00e8 male, ma \u00e8 piuttosto lungo, tecnico e potrebbe essere un po&#8217; troppo per coloro che hanno appena iniziato. Quindi semplifichiamolo un po&#8217; per questo articolo:<\/p>\n<p>Un po&#8217; meglio, forse?<\/p>\n<blockquote>\n<p>Un modo per raggruppare classi e interfacce correlate con uno scopo simile.<\/p>\n<\/blockquote>\n<p>Non parler\u00f2 di interfacce in questo discorso; tuttavia, so che ci sono sviluppatori orientati agli oggetti di livello intermedio che li usano, quindi volevo assicurarmi di menzionarli almeno.<\/p>\n<h3>Un esempio pratico<\/h3>\n<p>Non mi piacciono gli esempi di programmazione che non forniscono applicazioni pratiche o reali. Spesso ci vengono forniti esempi di cose che non codificheremmo mai.<\/p>\n<p>Quante volte hai letto un articolo orientato agli oggetti e fornisce un esempio di una classe di animali o di una classe di auto? Non programmiamo un&#8217;auto.<\/p>\n<p>\u00c8 molto pi\u00f9 probabile che lavoriamo con i file. Quindi daremo un&#8217;occhiata a un insieme di classi responsabili della lettura e della scrittura di file. Vale a dire, siamo stati bravi programmatori orientati agli oggetti e abbiamo separato le nostre classi in base alle responsabilit\u00e0 che mantengono.<\/p>\n<p>E s\u00ec, potresti avere interfacce; tuttavia, esulano dallo scopo di questo articolo, quindi non verranno inclusi.<\/p>\n<p>Quindi per il nostro FileReader, forse le basi della classe sono queste:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a1413b1bb.jpg\" 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-167194-61e7a1413b1bb.jpg\" alt=\"Spazi dei nomi e caricamento automatico in WordPress\" ><\/a><\/p>\n<p>Una classe per leggere i file.<\/p>\n<p>Si noti che la funzione accetta il nome del file che dovrebbe aprire per leggere. Il controllo degli errori, come legge il file e cosa restituisce \u00e8 tutto lasciato all&#8217;implementazione della classe.<\/p>\n<p>E per FileWriter, abbiamo qualcosa del genere:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a143c699f.jpg\" 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-167194-61e7a143c699f.jpg\" alt=\"Spazi dei nomi e caricamento automatico in WordPress\" ><\/a><\/p>\n<p>Una classe per scrivere file.<\/p>\n<p>Questa classe, d&#8217;altra parte, accetta le informazioni che scriver\u00e0 su disco e il nome del file su cui dovrebbe essere scritta.<\/p>\n<p>Ancora una volta, come nell&#8217;esempio sopra, non include il controllo degli errori, la scrittura di una risorsa, la chiusura delle risorse e cos\u00ec via.<\/p>\n<p>Ma non si tratta di lavorare con i file. Invece, si tratta di mostrare come assegnare uno spazio ai nomi del codice e questi due esempi sono pensati per essere fondamentali per questo.<\/p>\n<h3>Note sui namespace<\/h3>\n<p>C&#8217;\u00e8 un avvertimento su ci\u00f2 che vedi nelle immagini del codice di esempio sopra: queste classi non hanno lo spazio dei nomi. Vale a dire, risiedono nello spazio dei nomi globale che li lascia maturi per conflitti con altre classi.<\/p>\n<p>Guardala in questo modo: immagina di impacchettare questo codice in un plug-in per qualcun altro, e quindi caricare un altro plug-in che ha anche come FileReader o FileWriter. Dal momento che far\u00e0 tutto parte dello stesso <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.global.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">spazio dei nomi globale<\/a>, dovrai affrontare un conflitto.<\/p>\n<p>Ricorda:<\/p>\n<blockquote>\n<p>Gli spazi dei nomi sono un modo per raggruppare classi e interfacce correlate con uno scopo simile.<\/p>\n<\/blockquote>\n<p>Quindi prendiamo le classi e namespace il codice.<\/p>\n<p>In primo luogo, forniremo uno spazio dei nomi di primo livello sotto il quale risiederanno queste classi e tutte le altre classi; quindi forniremo un sottopacchetto (o sottospazio dei nomi o sottospazio come li ho sentiti chiamare) in cui risiederanno queste classi di file.<\/p>\n<p>Ci\u00f2 significa che il nostro FileReader ora apparir\u00e0 cos\u00ec:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a146586f4.jpg\" 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-167194-61e7a146586f4.jpg\" alt=\"Spazi dei nomi e caricamento automatico in WordPress\" ><\/a><\/p>\n<p>Una classe con spazio dei nomi per la lettura di file.<\/p>\n<p>E il nostro FileWriter ora apparir\u00e0 cos\u00ec:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a1487e5b2.jpg\" 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-167194-61e7a1487e5b2.jpg\" alt=\"Spazi dei nomi e caricamento automatico in WordPress\" ><\/a><\/p>\n<p>Una classe con spazio dei nomi per la scrittura di file.<\/p>\n<p>Innanzitutto, puoi vedere che l&#8217;uso degli spazi dei nomi \u00e8 facile: usi semplicemente la parola chiave namespace e quindi dichiara lo spazio dei nomi (che potrebbe essere altrettanto facilmente WCATL) in alto con i sottopacchetti seguenti.<\/p>\n<p>Ma questo porta ad altri argomenti, vale a dire l&#8217;organizzazione dei file, l&#8217;istanziazione e il caricamento automatico, che vale la pena affrontare.<\/p>\n<h3>Sull&#8217;organizzazione dei file<\/h3>\n<p>A questo punto, \u00e8 importante avere una parola sull&#8217;organizzazione dei file. A seconda della persona con cui parli, scoprirai che alcuni sviluppatori \u2013 sorpresa, sorpresa \u2013 hanno un&#8217;opinione su come dovrebbero essere organizzati i file (e io non sono diverso).<\/p>\n<p>Da un lato, non devi affatto organizzare i tuoi file. In effetti, puoi trascinare ogni singola cosa nella directory principale del tuo progetto, nello spazio dei nomi le informazioni ed essere pronto per partire.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a14ab117d.jpg\" 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-167194-61e7a14ab117d.jpg\" alt=\"Spazi dei nomi e caricamento automatico in WordPress\" ><\/a><\/p>\n<p>File non organizzati<\/p>\n<p>Il set di file sopra \u00e8 per un piccolo progetto, quindi puoi immaginare quanti file esisterebbero per un grande progetto.<\/p>\n<p>Ma quando hai i tuoi file organizzati in questo modo, pu\u00f2 rendere un po&#8217; difficile scrivere un caricatore automatico perch\u00e9 un caricatore automatico deve sapere dove trovare i file in base al loro spazio dei nomi.<\/p>\n<p>\u00c8 qui che entrano in gioco i termini &#8220;organizzazione logica&quot; e &#8220;organizzazione virtuale&#8221;.<\/p>\n<ul>\n<li>L&#8217;organizzazione logica si riferisce al modo in cui i file sono organizzati su disco, come quello che vedi sopra. Si trovano logicamente nella directory principale.<\/li>\n<li>Organizzazione virtuale si riferisce al modo in cui i file sono organizzati per quanto riguarda i loro spazi dei nomi. Ci\u00f2 significa che ci sono directory e sottodirectory che mappano agli spazi dei nomi, ai sottopacchetti e cos\u00ec via.<\/li>\n<\/ul>\n<p>Quindi, se dovessi prendere il progetto sopra, i suoi spazi dei nomi, i suoi sottopacchetti e quindi organizzarli sia logicamente che virtualmente, sembrerebbe qualcosa del genere:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a14d9a198.jpg\" 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-167194-61e7a14d9a198.jpg\" alt=\"Spazi dei nomi e caricamento automatico in WordPress\" ><\/a><\/p>\n<p>Spazi dei nomi e caricamento automatico: file organizzati<\/p>\n<p>E anche se puoi scegliere di organizzare i tuoi file come preferisci, sono un fan di assicurarmi che ci sia parit\u00e0 tra i due. Cio\u00e8, mi piace che la mia organizzazione logica e virtuale corrisponda come vedi nell&#8217;immagine sopra.<\/p>\n<p>Mentre passo alla discussione sul caricamento automatico, vedrai perch\u00e9 questo \u00e8 importante.<\/p>\n<h2>Note sui namespace<\/h2>\n<p>Cosa succede, per\u00f2, quando abbiamo bisogno di istanziare classi con namespace? Quando le classi non hanno uno spazio dei nomi, \u00e8 facile usare la parola chiave &#8216;new&#8217;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a14f8414e.jpg\" 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-167194-61e7a14f8414e.jpg\" alt=\"Spazi dei nomi e caricamento automatico in WordPress\" ><\/a><\/p>\n<p>Istanza senza uno spazio dei nomi.<\/p>\n<p>Ma dobbiamo istanziare una classe namespace, dobbiamo fare un ulteriore passo avanti e usare il nome completo:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a1519c7ff.jpg\" 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-167194-61e7a1519c7ff.jpg\" alt=\"Spazi dei nomi e caricamento automatico in WordPress\" ><\/a><\/p>\n<p>Spazi dei nomi e caricamento automatico: istanza con uno spazio dei nomi.<\/p>\n<p>Ma questo diventa ingombrante, vero? Questo particolare esempio non \u00e8 cos\u00ec male, ma immagina se stessi lavorando su qualcosa con pi\u00f9 sottopacchetti. Diventerebbe piuttosto ingombrante, vero?<\/p>\n<p>A tal fine, possiamo utilizzare ci\u00f2 che viene chiamato aliasing. \u00c8 anche semplice. Possiamo definire l&#8217;uso della parola chiave &#8216;use&#8217; nella parte superiore del file per fare riferimento allo spazio dei nomi a cui vogliamo alias e quindi utilizzare l&#8217;ultimo sottopacchetto come parte dell&#8217;alias per istanziare la nostra classe.<\/p>\n<p>Suona confuso, vero? Forse vederlo in azione aiuter\u00e0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a1541531b.jpg\" 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-167194-61e7a1541531b.jpg\" alt=\"Spazi dei nomi e caricamento automatico in WordPress\" ><\/a><\/p>\n<p>Alias \u200b\u200bdi namespace.<\/p>\n<p>E questo \u00e8 tutto ci\u00f2 che c&#8217;\u00e8 da fare. S\u00ec, puoi <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.importing.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fare un ulteriore passo avanti con l&#8217;aliasing<\/a>, ma questo \u00e8 quanto lo sto portando nel contesto di questo articolo.<\/p>\n<h2>Caricamento automatico<\/h2>\n<p>A questo punto, abbiamo gettato le basi per il caricamento automatico. S\u00ec, lavorare con gli spazi dei nomi pu\u00f2 essere molto faticoso se non ci sei abituato; tuttavia, \u00e8 importante capire perch\u00e9 il caricamento automatico richiede un po&#8217; di lavoro che potrebbe essere inaspettato se non ti \u00e8 mai stato presentato prima.<\/p>\n<p>Indipendentemente da ci\u00f2, le cose pi\u00f9 importanti da ricordare riguardo agli spazi dei nomi, a questo punto, sono:<\/p>\n<ol>\n<li>Gli spazi dei nomi sono un modo per raggruppare classi e interfacce correlate con uno scopo simile.<\/li>\n<li>Crea parit\u00e0 attraverso i tuoi file e spazi dei nomi assicurandomi che la tua organizzazione logica e virtuale sia la stessa.<\/li>\n<\/ol>\n<p>E ora \u00e8 il momento di dare un&#8217;occhiata al caricamento automatico.<\/p>\n<h3>Note sul caricamento automatico<\/h3>\n<p>Per prima cosa, diamo un&#8217;occhiata alla definizione di caricamento automatico fornita <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.autoload.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dal manuale PHP<\/a> :<\/p>\n<blockquote>\n<p>La funzione spl_autoload_register() registra un numero qualsiasi di caricatori automatici, consentendo il caricamento automatico di classi e interfacce se non sono attualmente definite. Registrando i caricatori automatici, a PHP viene data un&#8217;ultima possibilit\u00e0 di caricare la classe o l&#8217;interfaccia prima che fallisca con un errore.<\/p>\n<\/blockquote>\n<p>Non \u00e8 male. \u00c8 lungo, per\u00f2. Quindi, proprio come abbiamo fatto con gli spazi dei nomi, usiamo una definizione pi\u00f9 breve per questo articolo:<\/p>\n<blockquote>\n<p>Un modo per caricare automaticamente interfacce e classi senza utilizzare istruzioni include e require.<\/p>\n<\/blockquote>\n<p>Ancora una volta, non utilizzeremo le interfacce in questo articolo, sebbene alcuni sviluppatori lo facciano. E questo fornir\u00e0 la definizione di lavoro per il resto di questo articolo.<\/p>\n<h3>Un esempio pratico<\/h3>\n<p>Una volta che i file sono organizzati, assegnati allo spazio dei nomi e pronti per essere caricati, \u00e8 il momento di farlo, giusto? Intendo:<\/p>\n<ol>\n<li>i tuoi file sono organizzati,<\/li>\n<li>sei pronto per caricarli<\/li>\n<\/ol>\n<p>Quindi \u00e8 ora di farlo automaticamente, giusto? Ma c&#8217;\u00e8 un problema. L&#8217;intero &quot;caricamento automatico&quot; dei file richiede un po&#8217; di lavoro.<\/p>\n<h3>Scrivere un caricatore automatico<\/h3>\n<p>Cio\u00e8, \u00e8 automatico, ma richiede ancora un po&#8217; pi\u00f9 di lavoro da parte nostra. Prima di entrare in questi passaggi, \u00e8 importante notare:<\/p>\n<ol>\n<li>non \u00e8 completamente automatizzato,<\/li>\n<li>dobbiamo scriverlo.<\/li>\n<\/ol>\n<p>Per quanto bello sarebbe avere il codice caricato automaticamente, dobbiamo leggere alcuni dati, analizzarli e quindi provare a caricare il file corretto.<\/p>\n<p>Ma supponendo che tu lo scriva correttamente e il tuo spazio dei nomi e organizzi i tuoi file nello stesso modo per ogni progetto, puoi riutilizzare il tuo caricatore automatico. Cio\u00e8, lo scrivi una volta e puoi usarlo in altri progetti.<\/p>\n<h3>Passaggi per un caricatore automatico<\/h3>\n<p>Quando si scrive un caricatore automatico, ci sono solo alcuni passaggi da seguire. Il caricatore automatico deve essere in grado di rispondere ai seguenti file:<\/p>\n<ol>\n<li>Dove sono i file?<\/li>\n<li>Come si chiamano?<\/li>\n<li>Il file esiste?<\/li>\n<\/ol>\n<p>Se tutto quanto sopra \u00e8 vero (o puoi rispondere &quot;s\u00ec&quot; a tutti loro), il caricatore automatico far\u00e0 ci\u00f2 che dovrebbe fare.<\/p>\n<p>Tra poco daremo un&#8217;occhiata ad un po&#8217; di codice, ma la prima cosa da notare \u00e8 che usa una funzione chiamata spl_autoload_register.<\/p>\n<p>SPL fa riferimento alla <a href=\"https:\/\/php.net\/manual\/en\/book.spl.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">libreria PHP standard<\/a> e la funzione accetta una funzione come argomento e quella funzione accetta il nome della classe che verr\u00e0 istanziata. \u00c8 pi\u00f9 procedurale che orientato agli oggetti e ne parler\u00f2 momentaneamente, ma \u00e8 importante tenerlo a mente mentre leggi questo codice.<\/p>\n<p>Ecco la prima parte del codice. Spiegher\u00f2 cosa sta facendo dopo il fatto:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a1562a1b8.jpg\" 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-167194-61e7a1562a1b8.jpg\" alt=\"Spazi dei nomi e caricamento automatico in WordPress\" ><\/a><\/p>\n<p>Caricamento automatico, parte 1 \u2013 Trovare la classe<\/p>\n<p>In questa parte del codice, la funzione riceve il nome completo della classe da istanziare (come &quot;WCATLFileFileReader()&quot;).<\/p>\n<p>Successivamente, separa tutte le parti del nome completo in parti. Il nome della classe \u00e8 l&#8217;ultimo indice dell&#8217;array e scelgo di nominare i miei file come &quot;class-filereader.php&quot; in modo che la funzione crei una variabile, $class_file, che fa riferimento al nome del file.<\/p>\n<p>Ma non abbiamo ancora finito. Dobbiamo ancora ottenere il nome completo (ovvero, dove si trova il file sul disco). Questo potrebbe assomigliare a questo:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a15910c7c.jpg\" 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-167194-61e7a15910c7c.jpg\" alt=\"Spazi dei nomi e caricamento automatico in WordPress\" ><\/a><\/p>\n<p>Caricamento automatico, parte 2 \u2013 Ottenere il nome completo<\/p>\n<p>A questo punto, prepariamo una variabile, $full_qualified_path, che far\u00e0 riferimento alla directory di primo livello.<\/p>\n<p>Successivamente, il codice scorre tutti gli indici dell&#8217;array e crea un percorso per il file di classe. Puoi immaginarlo come costruire una stringa come &quot;wcatlfile&quot; che poi combiniamo con $class_file.<\/p>\n<p>Ci\u00f2 significa che il percorso completo del file diventa &quot;wcatlfileclass-filereader.php&quot;.<\/p>\n<p>E infine, includiamo il file. Si noti che questo codice non sta verificando se il file esiste. Anche se lo consiglio, \u00e8 stato tralasciato per motivi di lunghezza e perch\u00e9, nel nostro esempio, sappiamo che il file esiste.<\/p>\n<p>Se il file non esiste, sono disponibili diverse opzioni:<\/p>\n<ol>\n<li>Lancia un&#8217;eccezione,<\/li>\n<li>Prendi un&#8217;eccezione,<\/li>\n<li>Visualizza un tuo messaggio di errore,<\/li>\n<li>O qualche altra opzione che potrei prendere in considerazione in questo articolo.<\/li>\n<\/ol>\n<p>Indipendentemente da ci\u00f2, l&#8217;idea \u00e8 di essere difensivi nel codice in modo da poterti preparare al caso in cui un file non esiste e puoi gestire con grazia l&#8217;errore.<\/p>\n<h3>Al caricamento automatico<\/h3>\n<p>Prima di concludere, \u00e8 importante notare quanto segue:<\/p>\n<ul>\n<li>In tutto l&#8217;esempio, abbiamo utilizzato codice orientato agli oggetti durante lo spazio dei nomi del codice. Dopotutto, \u00e8 un concetto orientato agli oggetti.<\/li>\n<li>Il nostro caricatore automatico \u00e8 scritto in codice procedurale. Cosa d\u00e0?<\/li>\n<\/ul>\n<p>In definitiva, questo ha a che fare con la libreria PHP standard. Puoi scrivere un caricatore automatico orientato agli oggetti, ma penso che in molti casi sia un po&#8217; eccessivo.<\/p>\n<p>Il processo di caricamento di un file \u00e8 un processo graduale, quindi scriverlo in modo procedurale \u00e8 una scelta naturale.<\/p>\n<p>Infine, altri possono scegliere di utilizzare strumenti come Composer per inserire le dipendenze. Questi sono ottimi strumenti e ci sono molti vantaggi nell&#8217;usare qualcosa di simile; tuttavia, va oltre i concetti e gli argomenti in questo articolo ed \u00e8 meglio lasciarlo per un discorso futuro.<\/p>\n<h2>Risorse (e grazie!)<\/h2>\n<p>Questo \u00e8 stato uno degli articoli pi\u00f9 lunghi che ho scritto per il mio sito.<\/p>\n<p>Ci\u00f2 \u00e8 in parte dovuto al fatto che si basa su un discorso per un WordCamp e anche perch\u00e9 voglio assicurarmi di fornire una solida introduzione e base in cui puoi iniziare a incorporare spazi dei nomi e caricare automaticamente nei tuoi plugin di WordPress.<\/p>\n<p>Oltre a questo articolo, ho fornito anche le seguenti risorse:<\/p>\n<ul>\n<li>Le slide della mia presentazione sono <a href=\"https:\/\/speakerdeck.com\/tommcfarlin\/namespaces-and-autoloading-improving-wordpress-plugin-architecture\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">disponibili su SpeakerDeck<\/a>.<\/li>\n<li>Ho il codice di questa presentazione <a href=\"https:\/\/github.com\/tommcfarlin\/namespaces-and-autoloading-in-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">disponibile per il download su GitHub<\/a>.<\/li>\n<\/ul>\n<p>E con ci\u00f2, spero che questo fornisca una solida introduzione ai namepsace e al caricamento automatico e che tu sia in grado di iniziare a incorporarlo sempre di pi\u00f9 nel tuo lavoro. Beneficia notevolmente del tuo lavoro e anche di altri sviluppatori che potrebbero finire per utilizzare il tuo lavoro.<\/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>Sulla base del mio intervento al WordCamp Atlanta 2017, questo \u00e8 il mio articolo completo sugli spazi dei nomi e il caricamento automatico nello sviluppo di WordPress.<\/p>\n","protected":false},"author":1,"featured_media":221177,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,720,844,865],"tags":[1168],"class_list":["post-229553","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229553","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=229553"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229553\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229553"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229553"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229553"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}