In questo tutorial, ci prendiamo una pausa dalla scrittura del codice e guardiamo quali sono gli spazi dei nomi PHP e autoloader, come funzionano e perché sono utili. Quindi ci prepareremo a concludere questa serie implementandoli in codice.
Se non sei coinvolto in tutto ciò che abbiamo trattato nella serie a questo punto, ti consiglio di tornare indietro e rivedere ciò che abbiamo trattato finora. Per lo meno, rivedi l'articolo precedente in quanto getterà le basi per ciò di cui parleremo nei prossimi due articoli.
Ora che sei coinvolto, sei a conoscenza del plugin su cui abbiamo lavorato, di cosa fa e di come funziona. Inoltre, dovresti avere un ambiente di sviluppo locale che ti permetta di lavorare con il codice sorgente. In caso contrario, ecco una rapida carrellata di tutto ciò di cui hai bisogno:
Supponendo che tu abbia tutto ciò installato, configurato e pronto per andare con l'ultima versione del plugin, allora siamo pronti per riprendere la nostra discussione su namespace, autoloading e plugin WordPress.
Per coloro che hanno lavorato in altri linguaggi di programmazione moderni, è possibile avere familiarità con il concetto di spazio dei nomi. Ma anche se hai lavorato con PHP, non è probabile che tu li abbia visti molto, almeno nel contesto di WordPress.
Per quelli di voi che non hanno sentito parlare di loro o di chi avere sentito parlare di loro ma non li ho usati, questo è ciò che questo particolare articolo è tutto. Nello specifico, parleremo di namespace e autoloading e poi, nel prossimo tutorial, vedremo come si combina tutto.
Cioè, stiamo andando a prendere il lavoro che abbiamo fatto finora con il nostro plugin e quindi aggiornarlo in modo che utilizzi spazi dei nomi e autoloading. Questo ti darà una comprensione pratica dei concetti così come alcuni nuovi strumenti da aggiungere al tuo repertorio di sviluppo per quando lavori sul tuo prossimo progetto.
Come con la maggior parte dei miei tutorial, mi piace dare la definizione formale e quindi scomporla in termini più colloquiali. Il manuale PHP definisce gli spazi dei nomi come questo:
Nella definizione più ampia, gli spazi dei nomi sono un modo per incapsulare gli oggetti.
Questo non ci aiuta necessariamente molto, vero? Si potrebbe sostenere che le classi fanno la stessa cosa permettendo che attributi e funzioni possano essere generalizzati come elementi. Ma il manuale continua:
I namespace PHP forniscono un modo per raggruppare classi, interfacce, funzioni e costanti correlate.
Questo è un po 'più chiaro, giusto? Ciò significa che quando abbiamo un gruppo di classi correlate, possiamo raggrupparle nella stessa directory o directory simili sul filesystem, ma non c'è modo di saperlo guardando il codice.
I namespace ci danno la possibilità di farlo.
Pensala in questo modo: immagina di avere una serie di funzionalità correlate al lavoro con CSV.
Tutte queste funzionalità dovrebbero comprendere diverse classi. A seconda di come il codice orientato agli oggetti è la tua soluzione, potresti anche avere una serie di interfacce implementate dalle tue classi. Inoltre, le classi possono essere organizzate in a / csv
directory ma suddivisi ulteriormente nelle loro sottodirectory.
/leggere
/Scrivi
Forse decideresti di organizzare la struttura in modo un po 'diverso, ma per mantenere la discussione il più semplice possibile, ho pensato che avrebbe avuto senso. Quindi forse l'interfaccia di classe risiedeva nella radice di / csv
directory, il lettore risiederà nel /leggere
directory e le classi responsabili della scrittura dei dati nel database risiedono nel /Scrivi
elenco.
Nulla di quanto ho detto finora è fuori dall'ordinario in termini di come possiamo organizzare i nostri file. Ma è qui che entrano in gioco spazi dei nomi.
In particolare, cosa succede se siamo stati in grado di organizzare le nostre classi in modo che anche mappate alla loro posizione fisica nel filesystem?
Pensaci in questo modo: supponiamo che il tuo plugin si chiami Acme CSV e che le classi sopra elencate siano tutte organizzate nelle loro directory e sottodirectory e così via. Come potrebbero essere gli spazi dei nomi per queste classi e come dovrebbero essere dichiarate all'interno del progetto?
Dai un'occhiata a ciò che chiameremo il parser
classe. Questa classe si trova in / Csv / lettura
.
E poi diciamo che abbiamo la nostra classe che scrive i dati nel database:
Infine, vediamo come è lo spazio dei nomi per la classe che legge i dati dal database:
Niente di terribilmente complicato, giusto? Anche se lo standard sopra non è come te avere per organizzare i tuoi file, mi piace provare a mappare le mie classi sulla loro posizione su disco. Rende più facile fare riferimento a loro nel lavoro futuro.
A questo punto, non c'è davvero molto altro da vedere oltre a dichiarare un tipo di organizzazione delle tue classi in cima ai loro file. Ma quando inizi a incorporare l'autoloading, questo cambia.
Una parola su pacchetti e sottopacchetti
Prima di parlare di autoloading, però, voglio fare una breve digressione sul
@pacchetto
e@subpackage
tag che siamo spesso abituati a vedere nei commenti dei file.Ad esempio, è probabile che tu abbia visto qualcosa di simile rispetto al nostro codice qui sopra:
Ma quando fai riferimento alla documentazione di phpDocumentor, vedrai quanto segue
@subpackage
:Questo tag è considerato deprecato e può essere rimosso in una versione futura di phpDocumentor. Si consiglia di utilizzare l'abilità del tag @package per fornire più livelli.Così
@subpackage
viene deprecato, il che significa che probabilmente non dovremmo preoccuparci di usarlo più. Cosa ne pensi riguardo a@pacchetto
etichetta?Il tag @package viene utilizzato per categorizzare elementi strutturali in suddivisioni logiche.Il supporto per l'annidamento a più livelli ora risiede esclusivamente in quel tag. Buono a sapersi, giusto? Questo significa che il codice che vediamo sopra potrebbe essere scritto in questo modo:
Certo, è un semplice esempio, ma fa il punto. Lo dico perché
@subpackage
è ancora un altro tag che vediamo spesso in PHP basato su WordPress che dobbiamo evitare di usare se vogliamo iniziare ad adottare gli standard più recenti.Che cosa è l'autoloading?
Detto questo, torniamo agli argomenti principali a portata di mano. Dato che abbiamo coperto gli spazi dei nomi, diamo un'occhiata al caricamento automatico. Secondo il manuale PHP:
Molti sviluppatori che scrivono applicazioni orientate agli oggetti creano un file sorgente PHP per definizione di classe. Uno dei maggiori fastidi è dover scrivere una lunga lista di include inclusi all'inizio di ogni script (uno per ogni classe).Questo non potrebbe essere affermato meglio, vero? Tuttavia, non spiega realmente cosa sia il caricamento automatico. Spiega solo il problema che può risolvere.
In PHP 5, questo non è più necessario ... [supporta il caricamento] classi e interfacce da caricare automaticamente se non sono attualmente definiti.Sembra fantastico, vero? Ma c'è un avvertimento, e lo esploreremo in dettaglio nel prossimo tutorial. Ma fino ad allora, eccolo: per ottenere questa funzionalità, dobbiamo implementare una funzione che sappia dove cercare i file da caricare e come analizzare la struttura di directory di quei file.
Sembra noioso, e in alcuni casi potrebbe essere, ma se hai un modo coerente di organizzare il tuo lavoro, il tuo codice di autoloading può essere portatile. Cioè, puoi prendere la funzione che scrivi, rilasciarla in qualsiasi progetto basato su PHP ed essere pronta a fare lo stesso.
Ma questo tutorial specifico non riguarda la scrittura del codice. Si tratta di coprire l'idea alla base dei concetti del codice che implementeremo nel prossimo tutorial.
Perché c'è ne di questo rilevante?
A seconda di chi chiedi, puoi visualizzare spazi dei nomi e autoloading come nuovi in PHP. Per alcuni, questo è vero. Per altri, hanno lavorato con questi due concetti per un po 'di tempo.
Una delle cose su WordPress che può trattenerlo dall'adottare nuove funzionalità di PHP è il suo impegno per la retrocompatibilità. Questa non è necessariamente una buona cosa o una cosa negativa: è un attributo dell'applicazione.
Ma poiché WordPress ha una versione minima di PHP su cui viene eseguito, le nuove funzionalità linguistiche non vengono sempre adottate. E quando quella versione minima è adottato, occorrono alcuni sviluppatori specifici di WordPress per iniziare a utilizzare queste funzionalità nel loro codice.
E questa non è una brutta cosa In breve, gli sviluppatori stanno tenendo il passo con l'applicazione al ritmo con cui matura.
Ma come WordPress continua ad andare avanti o hai il controllo sull'ambiente in cui il tuo progetto è in esecuzione, potresti essere interessato ad adottare alcune delle caratteristiche della lingua che prima non esistevi o che non sapevi che erano disponibili.
I namespace e l'autoloading sono due potenti caratteristiche del linguaggio che fanno molto per rendere il codice più leggibile, più organizzato e anche un po 'più gestibile. Quindi, se non li hai ancora utilizzati in alcuno dei tuoi lavori in WordPress, specialmente se lavori con i plugin di WordPress, allora ti invito a considerare di farlo.
Conclusione
I namespace ci danno la possibilità di organizzare il nostro codice in un modo che rende molto più semplice il raggruppamento logico delle classi correlate. Inoltre, l'autoloading offre al nostro codice una maggiore leggibilità riducendo il numero di
includere
,include_once
,richiedere
, orequire_once
affermazioni che dobbiamo usare.Questo rende il codice sorgente che stiamo scrivendo più chiaro in quanto si concentra esclusivamente sulla logica per la quale è responsabile, senza dover fare nulla come i file di importazione, gestire varie strutture di directory ed essere consapevole di più del dovuto (per non parlare del fatto lo sviluppatore deve ridigitare costantemente tutto solo per poter accedere a un file).
E per coloro a cui piace assicurarsi che la struttura del loro codice segua la struttura organizzativa dei file e delle directory sul disco, ci dà la possibilità di organizzare i nostri progetti esattamente come quello.
Anche con tutto ciò detto, questo è solo un modo e alcuni vantaggi dei namespace e dell'autoloading. Argomenti più avanzati sono trattati nel manuale PHP e in altri progetti open source che ti consiglio di rivedere se hai tempo.
Nel prossimo tutorial, concluderemo questa serie applicando ciò che abbiamo imparato in questo tutorial mentre introduciamo spazi dei nomi e autoloading al nostro plugin WordPress. Fino ad allora, se stai cercando altro materiale relativo a WordPress, puoi trovare tutti i miei tutorial precedenti sulla mia pagina del profilo e puoi seguirmi sul mio blog o su Twitter.
Non esitare a lasciare qualsiasi domanda in sospeso su spazi dei nomi, autoloading o WordPress nel modulo sottostante.
risorse