Evitare class_exists nel codice WordPress orientato agli oggetti
Se scrivi codice orientato agli oggetti per WordPress (di solito nel contesto dei plugin), è 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ò di seguito).
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 è necessario. Invece, è una pratica migliore usare gli spazi dei nomi.
Evitando class_exists
Puoi vedere tutti i requisiti per varie versioni di WordPress in questa pagina, quindi se stai lavorando con versioni legacy di WordPress, l’intero controllo class_exists potrebbe valerne la pena.
Tuttavia, c’è una nota importante :
Nota: se ti trovi in un 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 potrebbero esporre il tuo sito a vulnerabilità di sicurezza.
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 è necessario utilizzare class_exists.
Detto questo, non è raro vedere qualcosa del genere :
O così :
Anni fa, scrivevo anche codice come questo. A volte doveva interfacciarsi con una base di codice preesistente. Altre volte era perché non sapevo niente di meglio. Il fatto è che questo è diventato qualcosa che vediamo nel codice basato su WordPress quando non dobbiamo usarlo.
In effetti, direi che non dovremmo usarlo più.
Ma più codice scrivi e più codice leggi, più impari, giusto? Questo fa parte dell’intero motivo per gli spazi dei nomi e il caricamento automatico.
Quindi come verrebbe scritto il codice sopra?
Forse così :
Tuttavia, questo solleva la domanda per alcuni: in che modo gli spazi dei nomi aiutano invece di usare class_exists?
Idealmente, se la stessa classe esiste all’interno di uno spazio dei nomi, c’è un problema con lo spazio dei nomi. Ricorda che puoi pensare a uno spazio dei nomi come a un pacchetto composto da pezzi unici. E poiché sono unici, non dovrebbe mai esserci un altro pezzo o, in questa classe, un’altra classe uguale.
A tal fine, anziché 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 – non l’ho fatto – ma ciò non significa che il codice che scrivo o rivedo includa l’uso o i consigli per cui.
È una modifica semplice che può fare molto per mantenere il codice più facile da leggere, disseminato di meno condizionali (un post per un’altra volta) e mantenerlo molto più organizzato.