În ultimul tutorial, am revizuit starea inițială a autoloaderului nostru și apoi am trecut printr-un proces de analiză și proiectare orientată pe obiecte. Scopul acestui lucru este să putem lega împreună tot ce am acoperit în această serie și seria introductivă.
În al doilea rând, scopul de a face acest lucru în propriul său tutorial este ca noi să putem petrece restul acestui timp de mers pe jos prin clasa noastră, văzând modul în care fiecare parte se potrivește împreună, punerea în aplicare în pluginul nostru, și apoi vedea modul în care aplicarea de programare orientată-obiect și principiul responsabilității unice poate conduce la o soluție mai concentrată și mai durabilă.
În acest moment, presupun că ați urmat împreună cu această serie. Dacă nu, atunci vă rugăm să consultați partea întâi și partea a doua. Aceasta presupune că ați urmat până acum.
Dacă sunteți începător, vă recomand să citiți și seria inițială în întregime. Odată ce ați fost prinși, ar trebui să vă aflați într-o poziție bună pentru a finaliza seria pe măsură ce încheiem cu restul codului sursă acoperit în acest tutorial.
Pentru a oferi un rezumat rapid și pentru a ne asigura că suntem pe aceeași pagină, am abordat următoarele subiecte din această serie:
În acest moment, suntem gata să schimbăm autoloaderul existent cu codul bazat pe obiect. Rețineți însă că nu va fi o simplă chestiune de schimbare a fișierelor.
În schimb, va trebui să creați fișierele, să vă asigurați că respectă standardele de codare WordPress, să le implementeze, să testeze implementarea lor pentru a vă asigura că pluginul funcționează și apoi să eliminați autoloaderul existent.
Suna ca o mulțime de muncă, dar dacă analiza și designul nostru de la tutorialul anterior a fost făcut corect și se dovedește a fi exacte, atunci ar trebui să avem puțină problemă făcând tot ce este menționat mai sus.
Înainte de a intra în implementare, vreau să vă dau o scurtă descriere a mediului de dezvoltare pe care ar trebui să-l aveți în sistemul dvs. Din punct de vedere tehnic, acesta este un lucru pe care ar trebui să-l executați deja pe direcțiile din tutoriile anterioare, dar vreau să fiu cât mai complet posibil.
Cu asta a spus, să începem.
În această secțiune, vom revedea tot codul pe care l-am revizuit în tutorialul anterior; cu toate acestea, vom analiza fiecare fișier individual împreună cu documentația completă.
În plus, o vom include în proiectul nostru, astfel încât până la sfârșitul tutorialului vom putea folosi acest cod în locul codului unic, bazat pe proceduri, pe care l-am folosit mai devreme.
Rețineți că fiecare dintre următoarele fișiere ar trebui să fie denumit ca enumerate și ar trebui să fie incluse în inc
director. În plus, toate acestea sunt disponibile pentru descărcare utilizând butonul albastru din bara laterală a acestui post.
namespace_validator = nou NamespaceValidator (); $ this-> file_registry = noul FileRegistry (); / ** * Încercă să se încarce numele de fișier specificat. * * @ param string $ filename Calea către fișierul pe care încercăm să o încărcăm. * / sarcina funcției publice (numele fișierului $) if ($ this-> namespace_validator-> is_valid ($ nume fișier)) $ this-> file_registry-> load (nume fișier $);
clasa-file-investigator.php
get_file_name ($ file_parts, $ curent, $ i); dacă (numără ($ file_parts) - 1! == $ i) $ filepath = trailingslashit ($ filepath); retur $ filepath; / ** * Returnează locația unei părți a numelui de fișier pe disc pe baza indexului curent al * matricei examinate. * * @access private * @param array $ file_parts Matricea tuturor părților din numele fișierului. * @ string string $ curent Partea actuală a fișierului pentru a examina. * @param int $ i Indicele curent al matricei de $ file_parts pentru a examina. * @ string retur Numele fișierului pe disc. * / funcția privată get_file_name ($ file_parts, $ current, $ i) $ filename = "; if (count ($ file_parts) - 1 === $ i) if ($ this-> is_interface ($ file_parts) $ filename = $ this-> get_interface_name ($ file_parts); altul $ filename = $ this-> get_class_name ($ curent); altceva $ filename = $ this-> get_namespace_name ($ current); ; / ** * Determină dacă fișierul specificat care este examinat este o interfață. * * @Access private * @param array $ file_parts Părțile filepath pentru a examina. * @Return bool Adevărat dacă interfața este conținută în numele fișierului; , false * * / funcția privată is_interface ($ file_parts) returnează strpos (strtolower ($ file_parts [count ($ file_parts) - 1]), 'interfață'); anumite părți ale fișierului trecute * în autoloader * * @access privat * @param array $ file_parts Matricea de părți ale fișierului de examinat. * @return string Numele fișierului interfeței. * / private fu nction get_interface_name ($ fișier_parts) $ interface_name = explode ('_', $ file_parts [count ($ file_parts) - 1]); $ interface_name = $ numele interfeței [0]; return "interfață- $ interface_name.php"; / ** * generează numele fișierului de clasă pe disc. * * @acces privat * @param string $ current piesa curentă a numelui de fișier pentru a examina. * @ string retur Numele fisierului de clasa pe disc. * / funcția privată get_class_name ($ curent) returnează "class- $ current.php"; / ** * Creează o mapare a spațiului de nume în structura directorului. * * @acces privat * @param string $ actual Partea curentă a dosarului de examinat. * @ string retur Calea mapării spațiului de nume la structura directorului. * / funcția privată get_namespace_name ($ curent) return '/'. $ Curent;clasa-file-registry.php
investigator = noul FileInvestigator (); / ** * Utilizează investigatorul de fișiere pentru a prelua locația fișierului pe disc. Dacă se găsește, atunci * o va include în proiect; în caz contrar, va arunca un mesaj de eroare WordPress. * * @param string $ filepath Calea către fișierul de pe disc pentru a include în plugin. * / încărcarea funcției publice ($ filepath) $ filepath = $ this-> investigator-> get_filetype ($ filepath); $ filepath = rtrim (plugin_dir_path (dirname (__FILE__)), '/'). $ Filepath; dacă (file_exists ($ filepath)) include_once ($ filepath); altceva wp_die (esc_html ('Fișierul specificat nu există.'));Includerea fișierelor, Pornirea aplicației Autoloader
Acum, când am creat fișierele noastre, trebuie să facem două modificări mici:
- Trebuie să includem toate clasele în directorul inc.
- Trebuie să scăpăm de vechiul cod de autoloader.
- Și trebuie să folosim noul nostru autoloader cu
spl_autoload_register
funcţie.În cele din urmă, versiunea finală a autoload.php ar trebui să arate astfel:
Și va realiza exact ceea ce am subliniat mai sus.
Dar așteptați, am primit o eroare!
În acest moment ați făcut multe lucruri. Ați refactat întreaga autoloader pentru a utiliza programarea orientată pe obiecte. Dvs. ați documentat clasele și funcțiile. Ați creat fișiere noi, ați eliminat codul din fișiere vechi și sunteți gata să vă asigurați că totul funcționează conform așteptărilor.
Deci, așa cum ar face orice dezvoltator, lansați fereastra browserului pentru a reîmprospăta pagina, doar pentru a fi afișat un mesaj de eroare:
Din fericire, acesta este un remediu ușor. Problema este că încercăm să adăugăm meta-caseta prea devreme. Pentru a rezolva acest lucru, vom actualiza
init
în metoda noastrăMeta_Box
clasa pentru a include aceasta:Și apoi vom introduce o funcție care va fi cuprinsă de lucrarea pe care tocmai am făcut-o:
afișare, "render"), "post", "partea", "mare");În acest moment, ar trebui să puteți executa noul cod fără probleme, fără avertismente, fără notificări și fără erori.
Concluzie
Muncind prin toate astea ar fi putut părea mult - și a fost! Dar chestia frumoasă este că a acoperit o mulțime de teren în trei tutoriale, și acesta a fost construit pe baza unei serii anterioare. În această privință, au fost abordate multe subiecte noi și au fost învățate noi tehnici.
Rețineți că scriu în mod regulat pentru Envato Tuts + și puteți găsi toate tutorialele mele anterioare pe pagina mea de profil. În plus, discut adesea despre dezvoltarea de software în contextul WordPress pe blogul meu și pe Twitter, deci nu ezitați să mă urmați pe nici un loc.
Cu acest lucru, studiați codul pe care l-am acoperit în această serie (și probabil cel precedent) și vedeți dacă nu puteți utiliza unele dintre aceste tehnici în activitatea dvs. existentă sau viitoare.
Resurse