✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Kuidas WordPressi teemas või pistikprogrammis nimeruumidega automaatlaadurit juurutada

5

Kui kirjutate objektorienteeritud koodi, on automaatlaadur kohustuslik. Ilma automaatse laadijata peaksite enne selle lähtestamist lisama rea, mis sisaldab klassi faili. See võib kiiresti olla tülikas, kui töötate paljude klassidega. Autoloader on funktsioon, mis käivitub iga kord, kui uus klass instantseeritakse, ja sisaldab klassifaili enne käivitamist.

Nimeruumid on viis koodi struktureerimiseks ja kapseldamiseks ning aitavad vältida nimede kokkupõrkeid. Kui kavatsete kirjutada OOP, on soovitatav kasutada ka nimeruume. Pidage meeles, et saate automaatse laadija juurutada ilma OOP-koodis nimeruume kasutamata.

Saate seda koodi kasutada oma WordPressi teema või pistikprogrammi jaoks või mis tahes PHP-koodi jaoks väljaspool WordPressi – lihtsalt muutke radu vastavalt. Selle näite jaoks loon WordPressi teema jaoks automaatlaaduri.

Klassi nimeruumi ja struktuuri reeglid

Automaatse laadija juurutamine eeldab teie koodistruktuuri ja nende leidmise kohta teatud kindlaid reegleid. Nimeruumide kasutamine lihtsustab seda mõnevõrra, kuna teie nimeruum võib viidata sellele, millises kaustas klassid asuvad.

Esmalt tehke otsus, mis teie nimeruumi nimetada. Tavaliselt on see teie koodi jaoks midagi unikaalset, näiteks teie teema nimi. Näiteks selle saidi teema nimeruum on AWhitePixelTheme. See tähendab, et automaatlaaduri töötamiseks peavad kõik klassid olema selles nimeruumis.

namespace AWhitePixelTheme;

Minu esimene reegel on, et iga klassifail sisaldab alati ainult ühte klassi ja klassi nimi peab olema sama, mis faili nimi. Näiteks; klass MyTestpeab olema faili sees määratletud MyTest.php.

Minu teine ​​reegel on, kuidas klasse kaustadesse struktureerida. Otsustan, et kõik klassid lähevad srcminu teema kausta. Klassifaile võin panna otse sellesse kausta ja selleks peavad need asuma ülal defineeritud “root" nimeruumis. Aga kui tahan luua alamkaustu ja sinna klassifaile panna, peavad nende nimeruumid sisaldama kaustastruktuuri. Näiteks klass faili MyTest.php, mis asub kaustas src/Test/, peab olema määratud see nimeruum:

namespace AWhitePixelThemeTest;

Autoloaderi loomine

Mulle meeldib hoida automaatlaadurit eraldi failis ja väljaspool src/kausta, mis on määratud ainult nimeruumiga klassifailide jaoks. Näiteks loon faili oma teema autoloader.phpkausta .inc/

PHP-l on sisseehitatud automaatlaaduri funktsioon: spl_autoload_register. Esitate parameetrina oma automaatlaaduri funktsiooni nime ja selles funktsioonis saate argumendina nõutud klassi (mille tahate newklassi instantieerimisel). Klasside instantseerimisel nimeruumidega, nt new AWhitePixelThemeTestMyTest(), on selle funktsiooni jaoks ette nähtud muutuja "AWhitePixelThemeTestMyTest".

Lisame automaatlaaduri funktsiooni ja määrame selles automaatlaaduri jaoks vajaliku nimeruumi:

Seejärel peame selle faili lisama, et meie automaatlaadur oleks registreeritud. Kuna see on teemas, lisan kaasamise teema functions.php. Kui kasutate seda pistikprogrammi jaoks, sisestage see oma pistikprogrammi failidesse. Autoloaderi fail tuleb lisada varakult, enne mis tahes klasside käivitamist. Panen selle oma esimesele reale functions.php:

require_once(get_template_directory(). '/inc/autoloader.php');

Kui kasutate seda lapseteema või pistikprogrammi jaoks, muutke teed vastavalt oma vajadustele.

Ja see ongi kõik. Nüüd on automaatlaadur paigas, kuid see ei tee midagi. Pöördume tagasi automaatlaaduri funktsiooni juurde ja lõpetame selle.

Autoloaderi funktsiooni kirjutamine ja testimine

Kõigepealt peame tagama, et taotletud klassi nimi on tegelikult meie nimeruumis. Kontrollime lihtsalt, kas antud nimeruumi klassi nimi sisaldab nimeruumi stringi, ja kui ei, siis väljume funktsioonist. Pärast seda eemaldame stringist nimeruumi nime, et saaksime välja töötada kõik alamkaustad ja klassifailid.

Nüüd muudame antud nimeruumi faili tegelikuks teeks. Esiteks asendame kõik ""nimeruumis olevad kaldkriipsud kausta eraldaja märgiga – selleks kasutame PHP konstanti DIRECTORY_SEPARATOR. Päris lõppu lisame ".php". Ja lõpuks enne stringi lisame täieliku juurtee. Kuna see on teema sees, kasutan ma get_template_directory(). Kui kasutate seda pistikprogrammi jaoks, kasutage meetodit, mis tagastab teie pistikprogrammi täieliku tee.

... $class = str_replace($namespace, '', $class);   $class = str_replace('', DIRECTORY_SEPARATOR, $class). '.php'; $directory = get_template_directory(); $path = $directory. DIRECTORY_SEPARATOR. 'src'. DIRECTORY_SEPARATOR. $class; }

Kõik, mida me nüüd tegema peame, on kontrollida, kas fail on olemas, ja kui on, siis seda nõuda.

... $path = $directory. DIRECTORY_SEPARATOR. 'src'. DIRECTORY_SEPARATOR. $class;   if (file_exists($path)) { require_once($path); } }

See on kõik!

Testime seda. TestLooge oma teema kausta alamkaust ja sisestage src/selle sisse php-fail nimega MyTest.php. Määratlege selles klass MyTest, järgides nimeruumi reegleid: AWhitePixelThemeTest. Lisan lihtsalt konstrueerimisfunktsiooni teksti "Edu", et saaksime hõlpsasti näha, et see tegelikult klassi initsialiseerib.

Oma funktsioonides.php pärast automaatlaaduri nõudmist loome lihtsalt klassi:

$test = new AWhitePixelThemeTestMyTest();

Värskendage oma WordPressi saiti ja veenduge, et saate "Edu!" väljastatakse.

Autoloader laadib automaatselt kõik meie määratletud nimeruumis olevad klassifailid ja järgib õigeid reegleid. Saate kursusi luua kõikjal oma teema sees, isegi klassides endis.

Täielik automaatlaaduri funktsioon

Viitamiseks siin on meie viimane automaatlaaduri funktsioon:

spl_autoload_register('awhitepixel_autoloader'); function awhitepixel_autoloader($class) { $namespace = 'AWhitePixelTheme';   if (strpos($class, $namespace) !== 0) { return; }   $class = str_replace($namespace, '', $class); $class = str_replace('', DIRECTORY_SEPARATOR, $class). '.php';   $directory = get_template_directory(); $path = $directory. DIRECTORY_SEPARATOR. 'src'. DIRECTORY_SEPARATOR. $class;   if (file_exists($path)) { require_once($path); } }

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem