{"id":228748,"date":"2022-10-29T09:14:00","date_gmt":"2022-10-29T06:14:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228748"},"modified":"2022-11-09T04:08:24","modified_gmt":"2022-11-09T01:08:24","slug":"nimeruumid-ja-automaatne-laadimine-wordpressis","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/nimeruumid-ja-automaatne-laadimine-wordpressis\/","title":{"rendered":"Nimeruumid ja automaatne laadimine WordPressis"},"content":{"rendered":"\n<p>Eelmisel n\u00e4dalal pidasin <a href=\"https:\/\/2017.atlanta.wordcamp.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordCamp Atlanta<\/a> ettekande nimeruumide ja automaatse laadimise teemal. (t\u00e4ispealkiri oli nimeruumid, automaatne laadimine ja pistikprogrammide arhitektuuri t\u00e4iustamine, kuid see on suut\u00e4is, kas pole?)<\/p>\n<p>Vestluse olemuse t\u00f5ttu olen otsustanud kirjutada postituse juurde postituse, jagada slaide ja jagada vestluse toetamiseks GitHubi n\u00e4idet.<\/p>\n<p>Nii et kui olite kohal, t\u00e4nan teid(!) ja siin on postitus, ma lubasin. Ja neile, kes ei osalenud, loodan, et see postitus aitab siiski n\u00e4idata kontseptsioone ja teemasid <a href=\"https:\/\/tommcfarlin.com\/wordcamp-atlanta-2017\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, mida WordCampis arutasin<\/a>.<\/p>\n<h2>Nimeruumid ja automaatne laadimine<\/h2>\n<p>Enne kui r\u00e4\u00e4gime WordPressi nimeruumidest ja automaatsest laadimisest, tahan sellest r\u00e4\u00e4kida, kuna see v\u00f5ib teie koodi kvaliteeti otseselt m\u00f5jutada ja seda veel kuude ja aastate jooksul.<\/p>\n<p>L\u00f5ppude l\u00f5puks ei esita paljud meist arendajad juba k\u00fcsimust:<\/p>\n<blockquote>\n<p>Kuidas saaksime oma koodi paremaks muuta, kui see praegu on?<\/p>\n<\/blockquote>\n<p>Ja paljud meist on piisavalt targad, et teada, mida me ei tea. Seega peame t\u00f6\u00f6tama meile antud piirangute piires.<\/p>\n<p>M\u00f5nikord on meil aega uurida, kuidas seda teha; muul ajal teeme t\u00f6\u00f6d teadmistega, mis meil on. Ja selles pole midagi halba.<\/p>\n<p>Kuid kuna me teame seda, mida me ei tea, teame, et meil on potentsiaali enamaks.<\/p>\n<h3>Esiteks, teie kood<\/h3>\n<p>Kui r\u00e4\u00e4kida sellistest teemadest nagu nimeruumid ja automaatne laadimine WordPressi kontekstis, siis arvan, et me saame sageli vastakaid vastuseid.<\/p>\n<p>L\u00f5ppude l\u00f5puks v\u00f5iksime r\u00e4\u00e4kida sellistest asjadest nagu <a href=\"https:\/\/codex.wordpress.org\/Theme_Customization_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Theme Customizer<\/a> v\u00f5i <a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">REST API<\/a> v\u00f5i millestki l\u00f5busamast.<\/p>\n<p>Ma m\u00f5tlen, et &quot;nimeruumid ja automaatne laadimine&quot; lihtsalt ei k\u00f5la p\u00f5nevalt ega edasiviivalt, kui v\u00f5rrelda saadaolevate uuemate funktsioonide ja tehnoloogiatega, eks?<\/p>\n<p>Aga ei, nad ei ole tegelikult igavad. Ja selle postituse ning sellega kaasneva esitluse ja l\u00e4htekoodi kaudu n\u00e4itan teile, miks ja kuidas nad ei ole.<\/p>\n<h4>Nad ei ole igavad<\/h4>\n<p>Ma arvan, et on \u00f5iglane \u00f6elda, et arendajad \u2013 v\u00e4hemalt osa meist v\u00f5i osa neist olenevalt sellest, kuidas te ennast n\u00e4ete \u2013 on programmeerimise aspektide \u00fcle vaidlemise poolest kurikuulsad.<\/p>\n<p>&quot;Igatahes igav vestlus.&quot;<\/p>\n<p>Tegelikult pole sugugi haruldane kuulda kedagi vaidlemas selle \u00fcle, milline on parim viis initsialiseerida ja kirjutada for-silmus, mis on v\u00f5imalikult t\u00f5hus, kui itereerida v\u00e4ikeses andmebaasikomplektis, hoolimata sellest, et meil on neljatuumalised protsessorid ja 16 GB muutm\u00e4lu. meie lauaarvutites.<\/p>\n<p>Nii et kui me nii v\u00e4ikesest asjast nii palju hoolime, hoolime kindlasti laiemast pildist. Sellised asjad nagu:<\/p>\n<ul>\n<li>T\u00e4iustatud kood<\/li>\n<li>Parem korraldus<\/li>\n<li>Suurenenud hooldatavus<\/li>\n<li>Lihtsam silumine<\/li>\n<li>Rohkem raha teenimine (noh, v\u00f5ib-olla).<\/li>\n<\/ul>\n<p>Ja nimeruumid ja automaatne laadimine v\u00f5ivad viia otse k\u00f5ige eelnevani (noh, ma ei saa r\u00e4\u00e4kida rahast, kuid sellel on potentsiaali).<\/p>\n<p>Kui ma peaksin k\u00f5igi \u00fclalnimetatute rollide nimeruumid ja automaatse laadimise kohad kokku v\u00f5tma, siis \u00fctleksin j\u00e4rgmist:<\/p>\n<p>Nimeruumid ja automaatne laadimine viivad parema korralduse, lahterdamise v\u00f5i modulariseerimise kaudu t\u00e4iustatud koodini ning nende kontseptsioonide kaudu tihedamate suheteni.<\/p>\n<p>Lisaks suurendab see hooldatavust, kuna kood on jaotatud pakettidena, mis v\u00f5ib toote kasvades h\u00f5lbustada silumist.<\/p>\n<p>K\u00f5ik see v\u00f5ib kaasa tuua aja s\u00e4\u00e4stmise v\u00f5i parema ajakasutamise, mis s\u00f5ltuvalt teie \u00e4rimudelist v\u00f5ib m\u00f5jutada teie kasumit.<\/p>\n<p>Kuid see ei kirjelda siiski kumbagi neist asjadest. Kuid kindlasti k\u00f5lavad need praegu huvitavamalt kui siis, kui neid esmakordselt tutvustati.<\/p>\n<h4>Niisiis, mis nad on?<\/h4>\n<p>Enne nende ja nende rollide m\u00e4\u00e4ratlustega tutvumist vaadakem, kuidas nimeruumide ja automaatse laadimise puudumine WordPressis on negatiivselt m\u00f5jutanud teie kogemusi teemade, pistikprogrammide, lisandmoodulite v\u00f5i mis iganes muul kasutamisel.<\/p>\n<p>Nii et p\u00f6\u00f6rdume korraks tagasi ja vaatame iga\u00fchte eraldi.<\/p>\n<h5>Nimeruumid<\/h5>\n<p>Kujutage ette, et olete p\u00e4rinud projekti ja hakkate sellega tegelema. Oletame, et see on WordPressi pistikprogramm.<\/p>\n<p>installite selle; aktiveerite selle ja seej\u00e4rel antakse teile v\u00e4hemalt \u00fcks j\u00e4rgmistest:<\/p>\n<ul>\n<li>V\u00f5ib-olla n\u00e4ete seda vastikut korraldusteadet brauseriakna \u00fclaosas, millel kuvatakse virna j\u00e4lg.<\/li>\n<li>V\u00f5ib-olla n\u00e4ete teadet, mis r\u00e4\u00e4gib konfliktist m\u00f5ne teise olemasoleva paketiga.<\/li>\n<li>V\u00f5i kui proovite pistikprogrammi aktiveerida, v\u00e4rskendatakse lehte, kuid pistikprogramm ei aktiveeru.<\/li>\n<li>V\u00f5ib-olla olete isegi koodiauditi teinud ja n\u00e4ete klassi_exists-kontrolle kogu koodibaasi ulatuses.<\/li>\n<\/ul>\n<p>Mis tahes v\u00f5i k\u00f5ik \u00fclaltoodud tegurid v\u00f5ivad loomulikult kaasa aidata probleemidele WordPressi projektidega. Kuid nimeruumid suudavad enamiku ajast t\u00f5esti paljusid asju parandada.<\/p>\n<p>See t\u00e4hendab, et p\u00f5hjus, miks teil neid probleeme kogete, on see, et kood, millega t\u00f6\u00f6tate, on osa globaalsest nimeruumist (v\u00f5rreldes selle nimeruumiga) ja PHP-le ei meeldi, kui klassid ja moodulid on sama nimega. .<\/p>\n<p>Aga kui annate millegi nimeruumi, annate sellele tema enda suhtes oma ala, mis m\u00e4ngib kenasti teiste komponentidega, isegi kui neil on sama klassi nimi.<\/p>\n<h5>Automaatlaadurid<\/h5>\n<p>Mis puudutab automaatlaadureid, siis need on m\u00f5nes m\u00f5ttes veidi v\u00e4hem keerulised. Esmalt m\u00f5elge koodile, mida kirjutate, v\u00f5i koodile, millega t\u00f6\u00f6tate \u2013 eriti WordPressi pistikprogrammide kontekstis \u2013 ja seej\u00e4rel m\u00f5elge sellele, mitu korda kirjutate v\u00f5i n\u00e4ete j\u00e4rgmist.<\/p>\n<ul>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.include.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sisaldama<\/a><\/li>\n<li>kaasa_\u00fcks kord<\/li>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.require.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00f5uda<\/a><\/li>\n<li>n\u00f5ua_\u00fcks kord<\/li>\n<\/ul>\n<p>Ja m\u00f5nikord n\u00e4ete neid pistikprogrammi k\u00e4ivitava faili \u00fclaosas ja m\u00f5nikord n\u00e4ete neid koodibaasi laiali.<\/p>\n<p>Kui need k\u00f5ik sisalduvad \u00fches failis, pole see nii hull, sest v\u00e4hemalt teate, kus need asuvad. Aga kui need on k\u00f5ikjal risustatud, siis pole teil aimugi, kust s\u00f5ltuvus s\u00fcsteemi tuuakse.<\/p>\n<p>Automaatne laadimine v\u00f5ib selle k\u00f5ik lahendada, laadides vajaduse korral s\u00f5ltuvused (ja huvilistele on automaatne laadimine kiirem kui k\u00e4sitsi kaasamine).<\/p>\n<h2>Nimeruumid<\/h2>\n<p>K\u00f5ike seda arvesse v\u00f5ttes oleme valmis r\u00e4\u00e4kima nii <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nimeruumidest<\/a> kui ka automaatsest laadimisest. Kuid nimeruumid on aluskontseptsioon, nii et alustame sellest.<\/p>\n<p>Kuid p\u00e4rast k\u00f5ike \u00fclaltoodut n\u00e4ete nende kasutamise eeliseid. V\u00f5ib-olla on nad isegi l\u00f5busad, eks? V\u00f5ib olla?<\/p>\n<p>Sellest hoolimata vajame definitsiooni, mille p\u00f5hjal saame \u00fclej\u00e4\u00e4nud artiklis sellest l\u00e4bi r\u00e4\u00e4kida.<\/p>\n<p>PHP k\u00e4siraamat <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.rationale.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pakub j\u00e4rgmise m\u00e4\u00e4ratluse<\/a> :<\/p>\n<blockquote>\n<p>Nimeruumid on m\u00f5eldud kahe probleemi lahendamiseks, millega raamatukogude ja rakenduste autorid korduvkasutatavate koodielementide, n\u00e4iteks klasside v\u00f5i funktsioonide loomisel kokku puutuvad&#8230;<\/p>\n<\/blockquote>\n<p>Ja see pole halb, kuid see on \u00fcsna pikk, tehniline ja see v\u00f5ib olla natuke palju neile, kes alles alustavad. Nii et lihtsustame seda selle artikli jaoks veidi:<\/p>\n<p>Natuke parem ehk?<\/p>\n<blockquote>\n<p>V\u00f5imalus r\u00fchmitada sarnase eesm\u00e4rgiga seotud klasse ja liideseid.<\/p>\n<\/blockquote>\n<p>Ma ei hakka selles k\u00f5nes r\u00e4\u00e4kima liidestest; aga ma tean, et on kesktaseme objektorienteeritud arendajaid, kes neid kasutavad, nii et tahtsin veenduda, et ma neid v\u00e4hemalt mainiks.<\/p>\n<h3>Praktiline n\u00e4ide<\/h3>\n<p>Mulle ei meeldi programmeerimisn\u00e4ited, mis ei anna reaalset ega praktilist rakendust. Sageli tuuakse meile n\u00e4iteid asjade kohta, mida me kunagi kodifitseerima ei hakkaks.<\/p>\n<p>Mitu korda olete lugenud objektorienteeritud artiklit ja see toob n\u00e4ite loomade v\u00f5i autode klassist? Me ei hakka autot programmeerima.<\/p>\n<p>Suure t\u00f5en\u00e4osusega t\u00f6\u00f6tame failidega. Seega vaatame failide lugemise ja kirjutamise eest vastutavate klasside komplekti. See t\u00e4hendab, et oleme olnud head objektorienteeritud programmeerijad ja eraldanud oma klassid nende kohustuste alusel.<\/p>\n<p>Ja jah, teil v\u00f5ivad olla liidesed; kuid need ei kuulu selle artikli reguleerimisalasse, seega neid ei kaasata.<\/p>\n<p>Nii et meie FileReaderi jaoks n\u00e4evad klassi p\u00f5hit\u00f5ed v\u00e4lja j\u00e4rgmised:<\/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=\"Nimeruumid ja automaatne laadimine WordPressis\" ><\/a><\/p>\n<p>Failide lugemise klass.<\/p>\n<p>Pange t\u00e4hele, et funktsioon aktsepteerib faili nime, mille see peaks lugemiseks avama. Veakontroll, kuidas see faili loeb ja mida see tagastab, on k\u00f5ik j\u00e4etud klassi rakendamise otsustada.<\/p>\n<p>Ja FileWriteri jaoks on meil midagi sellist:<\/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=\"Nimeruumid ja automaatne laadimine WordPressis\" ><\/a><\/p>\n<p>Failide kirjutamise klass.<\/p>\n<p>See klass aga aktsepteerib teavet, mida see kettale kirjutab, ja faili nime, kuhu see tuleks kirjutada.<\/p>\n<p>J\u00e4llegi, nagu \u00fclaltoodud n\u00e4ite puhul, ei h\u00f5lma see vigade kontrollimist, ressursi kaudu kirjutamist, ressursside sulgemist ja nii edasi.<\/p>\n<p>Kuid see ei puuduta failidega t\u00f6\u00f6tamist. Selle asemel n\u00e4idatakse, kuidas oma koodi nimeruumi m\u00e4\u00e4rata, ja need kaks n\u00e4idet on selle jaoks aluseks.<\/p>\n<h3>M\u00e4rkused nimeruumide kohta<\/h3>\n<p>\u00dclaltoodud n\u00e4idiskoodi piltidel on hoiatus: need klassid ei ole nimeruumiga. See t\u00e4hendab, et nad elavad globaalses nimeruumis, mis j\u00e4tab nad k\u00fcpseks konfliktideks teiste klassidega.<\/p>\n<p>Vaadake seda j\u00e4rgmiselt: kujutage ette, et pakite selle koodi kellegi teise jaoks m\u00f5eldud pistikprogrammi ja seej\u00e4rel laadib ta teise pistikprogrammi, millel on ka FileReader v\u00f5i FileWriter. Kuna see k\u00f5ik on osa samast <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.global.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">globaalsest nimeruumist<\/a>, seisate silmitsi konfliktiga.<\/p>\n<p>Pidage meeles:<\/p>\n<blockquote>\n<p>Nimeruumid on viis sarnase eesm\u00e4rgiga seotud klasside ja liideste r\u00fchmitamiseks.<\/p>\n<\/blockquote>\n<p>Nii et v\u00f5tame klassid ja koodi nimeruumi.<\/p>\n<p>Esiteks pakume tipptasemel nimeruumi, mille all need klassid ja k\u00f5ik muud klassid asuvad; siis pakume alampaketi (v\u00f5i alamnimeruumi v\u00f5i alamruumi, nagu ma olen kuulnud neid kutsumas), milles need failiklassid asuvad.<\/p>\n<p>See t\u00e4hendab, et meie FileReader n\u00e4eb n\u00fc\u00fcd v\u00e4lja selline:<\/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=\"Nimeruumid ja automaatne laadimine WordPressis\" ><\/a><\/p>\n<p>Nimeruumiga klass failide lugemiseks.<\/p>\n<p>Ja meie FileWriter n\u00e4eb n\u00fc\u00fcd v\u00e4lja selline:<\/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=\"Nimeruumid ja automaatne laadimine WordPressis\" ><\/a><\/p>\n<p>Nimeruumiga klass failide kirjutamiseks.<\/p>\n<p>Esiteks n\u00e4ete, et nimeruumide kasutamine on lihtne: kasutate lihtsalt nimeruumi m\u00e4rks\u00f5na ja seej\u00e4rel deklareerite nimeruumi (mis v\u00f5ib sama lihtsalt olla WCATL) \u00fclaosas koos j\u00e4rgnevate alampakettidega.<\/p>\n<p>Kuid see viib muude teemadeni \u2013 nimelt failide korraldamise, instantsimise ja automaatse laadimise kohta \u2013, mida k\u00f5ike tasub k\u00e4sitleda.<\/p>\n<h3>Failikorralduse kohta<\/h3>\n<p>Siinkohal on oluline r\u00e4\u00e4kida failikorraldusest. S\u00f5ltuvalt sellest, kellega r\u00e4\u00e4gite, avastate, et m\u00f5nel arendajal \u2013 \u00fcllatus, \u00fcllatus \u2013 on arvamus selle kohta, kuidas faile tuleks korraldada (ja mina ei erine sellest).<\/p>\n<p>\u00dchest k\u00fcljest ei pea te faile \u00fcldse korraldama. Tegelikult saate k\u00f5ik asjad oma projekti juurkataloogi panna, teabe nimeruumi ja olla valmis.<\/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=\"Nimeruumid ja automaatne laadimine WordPressis\" ><\/a><\/p>\n<p>Korraldamata failid<\/p>\n<p>\u00dclaltoodud failide komplekt on m\u00f5eldud v\u00e4ikese projekti jaoks, nii et v\u00f5ite ette kujutada, kui palju faile oleks suure projekti jaoks.<\/p>\n<p>Kuid kui teil on failid nii korraldatud, v\u00f5ib see muuta automaatlaaduri kirjutamise pisut keeruliseks, kuna automaatlaadur peab teadma, kust failid nende nimeruumi p\u00f5hjal leida.<\/p>\n<p>Siin tulevad m\u00e4ngu m\u00f5isted &quot;loogiline organisatsioon&quot; ja &quot;virtuaalne organisatsioon&quot;.<\/p>\n<ul>\n<li>Loogiline korraldus viitab sellele, kuidas failid on kettal korraldatud, nagu \u00fclaltoodud. Need asuvad loogiliselt juurkataloogis.<\/li>\n<li>Virtuaalne korraldus viitab sellele, kuidas failid on nende nimeruumide j\u00e4rgi korraldatud. See t\u00e4hendab, et on olemas kataloogid ja alamkataloogid, mis vastavad nimeruumidele, alampakettidele jne.<\/li>\n<\/ul>\n<p>Nii et kui v\u00f5taksite \u00fclaltoodud projekti, selle nimeruumid, alampaketid ja korraldaksite need nii loogiliselt kui ka virtuaalselt, n\u00e4eks see v\u00e4lja umbes selline:<\/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=\"Nimeruumid ja automaatne laadimine WordPressis\" ><\/a><\/p>\n<p>Nimeruumid ja automaatne laadimine: organiseeritud failid<\/p>\n<p>Ja kuigi saate oma faile korraldada nii, nagu soovite, olen nende kahe v\u00f5rdsuse tagamise f\u00e4nn. See t\u00e4hendab, et mulle meeldib, et minu loogiline ja virtuaalne organisatsioon sobivad kokku, nagu n\u00e4ete \u00fclaloleval pildil.<\/p>\n<p>Kui hakkan automaatse laadimise \u00fcle arutama, n\u00e4ete, miks see oluline on.<\/p>\n<h2>M\u00e4rkused nimeruumide kohta<\/h2>\n<p>Mis aga juhtub, kui meil on vaja instantseerida klassid, mis on nimeruumiga? Kui klassid ei ole nimeruumis, on lihtne kasutada m\u00e4rks\u00f5na &quot;uus&quot;.<\/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=\"Nimeruumid ja automaatne laadimine WordPressis\" ><\/a><\/p>\n<p>Esinemine ilma nimeruumita.<\/p>\n<p>Kuid me peame instantseerima nimeruumiga klassi, peame astuma sammu edasi ja kasutama t\u00e4ielikult kvalifitseeritud nime:<\/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=\"Nimeruumid ja automaatne laadimine WordPressis\" ><\/a><\/p>\n<p>Nimeruumid ja automaatne laadimine: nimeruumiga loomine.<\/p>\n<p>Kuid see muutub t\u00fclikaks, kas pole? See konkreetne n\u00e4ide pole nii halb, kuid kujutage ette, kui t\u00f6\u00f6taksite millegi kallal, kus on rohkem alampakette. See l\u00e4heks \u00fcsna t\u00fclikaks, kas pole?<\/p>\n<p>Sel eesm\u00e4rgil saame kasutada nn varjunime. See on ka lihtne. V\u00f5ime defineerida faili \u00fclaosas m\u00e4rks\u00f5na &quot;use&quot; kasutamise, et viidata nimeruumile, millele tahame varjunime anda, ja seej\u00e4rel kasutada viimast alampaketti aliase osana, et oma klassi instantseerida.<\/p>\n<p>K\u00f5lab segaselt, kas pole? V\u00f5ib-olla aitab selle n\u00e4gemine tegevuses:<\/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=\"Nimeruumid ja automaatne laadimine WordPressis\" ><\/a><\/p>\n<p>Nimeruumide alias.<\/p>\n<p>Ja see on k\u00f5ik. Jah, v\u00f5ite <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.importing.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pseudon\u00fc\u00fcmi kasutamisega sammu edasi minna<\/a>, kuid see on nii kaugele, kui ma seda selle artikli kontekstis v\u00f5tan.<\/p>\n<h2>Automaatne laadimine<\/h2>\n<p>Siinkohal on meil automaatlaadimiseks alus pandud. Jah, nimeruumide l\u00e4bi t\u00f6\u00f6tamine v\u00f5ib olla palju t\u00f6\u00f6d, kui te pole sellega harjunud; Siiski on oluline m\u00f5ista, sest automaatne laadimine n\u00f5uab natuke t\u00f6\u00f6d, mis v\u00f5ib olla ootamatu, kui te pole seda kunagi varem tutvustanud.<\/p>\n<p>Sellest hoolimata on k\u00f5ige olulisemad asjad, mida nimeruumidega seoses meeles pidada, on j\u00e4rgmised:<\/p>\n<ol>\n<li>Nimeruumid on viis sarnase eesm\u00e4rgiga seotud klasside ja liideste r\u00fchmitamiseks.<\/li>\n<li>Looge oma failide ja nimeruumide kaudu paarsus, tagades, et teie loogiline ja virtuaalne organisatsioon on samad.<\/li>\n<\/ol>\n<p>Ja n\u00fc\u00fcd on aeg vaadata automaatset laadimist.<\/p>\n<h3>M\u00e4rkused automaatse laadimise kohta<\/h3>\n<p>K\u00f5igepealt vaatame automaatse laadimise m\u00e4\u00e4ratlust, mis on <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.autoload.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">antud PHP juhendis<\/a> :<\/p>\n<blockquote>\n<p>Funktsioon spl_autoload_register() registreerib suvalise arvu automaatlaadureid, v\u00f5imaldades klasside ja liideste automaatset laadimist, kui need pole hetkel m\u00e4\u00e4ratletud. Autoloaderite registreerimisel antakse PHP-le viimane v\u00f5imalus klass v\u00f5i liides laadida enne, kui see vea t\u00f5ttu eba\u00f5nnestub.<\/p>\n<\/blockquote>\n<p>See ei ole paha. See on siiski pikk. Nii nagu tegime nimeruumide puhul, kasutame selle artikli jaoks l\u00fchemat m\u00e4\u00e4ratlust:<\/p>\n<blockquote>\n<p>Viis liideste ja klasside automaatseks laadimiseks ilma kaasamise ja n\u00f5udmise avaldusi kasutamata.<\/p>\n<\/blockquote>\n<p>J\u00e4llegi, me ei kasuta selles artiklis liideseid, kuigi m\u00f5ned arendajad seda teevad. Ja see annab t\u00f6\u00f6m\u00e4\u00e4ratluse selle artikli \u00fclej\u00e4\u00e4nud osas.<\/p>\n<h3>Praktiline n\u00e4ide<\/h3>\n<p>Kui olete oma failid organiseeritud, nimeruumi paigutanud ja laadimiseks valmis, on aeg seda teha, eks? Ma m\u00f5tlen:<\/p>\n<ol>\n<li>teie failid on korrastatud,<\/li>\n<li>olete valmis neid laadima<\/li>\n<\/ol>\n<p>Nii et on aeg seda automaatselt teha, eks? Kuid seal on konks. Kogu failide &quot;automaatne laadimine&quot; n\u00f5uab natuke t\u00f6\u00f6d.<\/p>\n<h3>Autoloaderi kirjutamine<\/h3>\n<p>See t\u00e4hendab, et see on automaatne, kuid see n\u00f5uab meilt siiski veidi rohkem t\u00f6\u00f6d. Enne nende sammudega alustamist on oluline m\u00e4rkida:<\/p>\n<ol>\n<li>see pole t\u00e4ielikult automatiseeritud,<\/li>\n<li>me peame selle kirjutama.<\/li>\n<\/ol>\n<p>Nii tore kui ka koodi automaatne laadimine oleks, peame lugema m\u00f5ned andmed, need s\u00f5eluma ja seej\u00e4rel proovima \u00f5iget faili laadida.<\/p>\n<p>Kuid eeldades, et kirjutate selle \u00f5igesti ja oma nimeruumi ning korraldate failid iga projekti jaoks samal viisil, saate oma automaatlaadurit uuesti kasutada. See t\u00e4hendab, et kirjutate selle \u00fche korra ja saate seda kasutada teistes projektides.<\/p>\n<h3>Automaatlaaduri sammud<\/h3>\n<p>Autoloaderi kirjutamisel tuleb j\u00e4rgida vaid m\u00f5nda sammu. Autoloader peab suutma vastata j\u00e4rgmistele failidele:<\/p>\n<ol>\n<li>Kus failid on?<\/li>\n<li>Kuidas neid nimetatakse?<\/li>\n<li>Kas fail on olemas?<\/li>\n<\/ol>\n<p>Kui k\u00f5ik \u00fclaltoodud on t\u00f5esed (v\u00f5i saate neile k\u00f5igile vastata &quot;jah&quot;), teeb automaatlaadur seda, mida ta peaks tegema.<\/p>\n<p>Vaatame hetke p\u00e4rast m\u00f5nda koodi, kuid esimene asi, mida tuleb t\u00e4hele panna, on see, et see kasutab funktsiooni nimega spl_autoload_register.<\/p>\n<p>SPL viitab <a href=\"https:\/\/php.net\/manual\/en\/book.spl.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">standardsele PHP teegile<\/a> ja funktsioon aktsepteerib funktsiooni argumendina ja see funktsioon aktsepteerib selle klassi nime, mida luuakse. See on pigem protseduuriline kui objektorienteeritud ja ma r\u00e4\u00e4gin sellest kohe, kuid seda on oluline seda koodi lugedes meeles pidada.<\/p>\n<p>Siin on koodi esimene osa. Selgitan hiljem, mida see teeb:<\/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=\"Nimeruumid ja automaatne laadimine WordPressis\" ><\/a><\/p>\n<p>Automaatne laadimine, 1. osa \u2013 klassi leidmine<\/p>\n<p>Selles koodi osas saab funktsioon instantseeritava klassi t\u00e4iskvalifitseeritud nime (nt &#8220;WCATLFileFileReader()&quot;).<\/p>\n<p>J\u00e4rgmisena eraldab see k\u00f5ik t\u00e4isnimetuse osad osadeks. Klassi nimi on massiivi viimane indeks ja ma valin oma failidele nime anda &quot;class-filereader.php&quot;, nii et funktsioon loob muutuja $class_file, mis viitab faili nimele.<\/p>\n<p>Kuid me pole veel l\u00f5petanud. Peame ikkagi hankima t\u00e4ielikult kvalifitseeritud nime (see t\u00e4hendab, kus fail kettal asub). See v\u00f5ib v\u00e4lja n\u00e4ha umbes selline:<\/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=\"Nimeruumid ja automaatne laadimine WordPressis\" ><\/a><\/p>\n<p>Automaatne laadimine, 2. osa \u2013 t\u00e4ieliku nime saamine<\/p>\n<p>Sel hetkel valmistame ette muutuja $full_qualified_path, mis viitab tipptaseme kataloogile.<\/p>\n<p>J\u00e4rgmisena itereerib kood l\u00e4bi massiivi k\u00f5igi indeksite ja loob klassifaili tee. V\u00f5ite seda ette kujutada stringi, n\u00e4iteks &quot;wcatlfile&quot; loomisena, mille \u00fchendame seej\u00e4rel failiga $class_file.<\/p>\n<p>See t\u00e4hendab, et faili t\u00e4ielikuks teeks saab &quot;wcatlfileclass-filereader.php&quot;.<\/p>\n<p>Ja l\u00f5puks lisame faili. Pange t\u00e4hele, et see kood ei kontrolli faili olemasolu. Kuigi ma soovitan seda, on see pikkuse huvides v\u00e4lja j\u00e4etud ja kuna meie n\u00e4ites teame, et fail on olemas.<\/p>\n<p>Kui faili pole olemas, on mitu v\u00f5imalust:<\/p>\n<ol>\n<li>Tee erand,<\/li>\n<li>P\u00fc\u00fcdke erand,<\/li>\n<li>Kuvage oma veateade,<\/li>\n<li>V\u00f5i m\u00f5ni muu v\u00f5imalus, mida ma selles artiklis kaalun.<\/li>\n<\/ol>\n<p>Sellest hoolimata on idee olla oma koodis kaitsev, et saaksite valmistuda juhuks, kui faili pole olemas, ja saaksite t\u00f5rkega toime tulla.<\/p>\n<h3>Automaatse laadimise korral<\/h3>\n<p>Enne l\u00f5petamist tasub t\u00e4hele panna j\u00e4rgmist.<\/p>\n<ul>\n<li>Kogu n\u00e4ite jooksul oleme koodi nimevahede m\u00e4\u00e4ramisel kasutanud objektorienteeritud koodi. L\u00f5ppude l\u00f5puks on see objektorienteeritud kontseptsioon.<\/li>\n<li>Meie automaatlaadur on kirjutatud protseduurikoodis. Mis annab?<\/li>\n<\/ul>\n<p>L\u00f5ppkokkuv\u00f5ttes on see seotud standardse PHP raamatukoguga. V\u00f5ite kirjutada objektorienteeritud automaatlaaduri, kuid ma arvan, et see on paljudel juhtudel pisut liialdatud.<\/p>\n<p>Faili laadimise protsess on samm-sammuline protsess, nii et selle protseduuriline kirjutamine sobib loomulikult.<\/p>\n<p>L\u00f5puks v\u00f5ivad teised valida s\u00f5ltuvuste toomiseks kasutada selliseid t\u00f6\u00f6riistu nagu Composer. Need on suurep\u00e4rased t\u00f6\u00f6riistad ja millegi sellisel kasutamisel on palju eeliseid; aga see on v\u00e4ljaspool selle artikli m\u00f5isteid ja teemasid ning on parem j\u00e4tta tulevaseks jutuks.<\/p>\n<h2>Ressursid (ja ait\u00e4h!)<\/h2>\n<p>See on olnud \u00fcks pikimaid artikleid, mille olen oma saidile kirjutanud.<\/p>\n<p>See on osaliselt tingitud sellest, et see p\u00f5hineb WordCampi vestlusel ja ka seet\u00f5ttu, et tahan olla kindel, et pakun tugeva sissejuhatuse ja aluse, mille abil saate alustada nimeruumide lisamist ja automaatset laadimist oma WordPressi pistikprogrammidesse.<\/p>\n<p>Lisaks sellele artiklile olen pakkunud ka j\u00e4rgmisi ressursse:<\/p>\n<ul>\n<li>Minu esitluse slaidid on <a href=\"https:\/\/speakerdeck.com\/tommcfarlin\/namespaces-and-autoloading-improving-wordpress-plugin-architecture\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">saadaval SpeakerDeckis<\/a>.<\/li>\n<li>Mul on selle esitluse kood <a href=\"https:\/\/github.com\/tommcfarlin\/namespaces-and-autoloading-in-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">GitHubis allalaadimiseks<\/a> saadaval .<\/li>\n<\/ul>\n<p>Ja sellega seoses loodan, et see annab p\u00f5hjaliku sissejuhatuse namepsace&#8217;i ja automaatse laadimise kohta ning et saate hakata seda \u00fcha enam oma t\u00f6\u00f6sse kaasama. Sellest on palju kasu teie t\u00f6\u00f6le ja teistele arendajatele, kes v\u00f5ivad samuti teie t\u00f6\u00f6d kasutada.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>See on minu p\u00f5hjalik artikkel nimeruumide ja automaatse laadimise kohta WordPressi arenduses, mis p\u00f5hineb minu WordCamp Atlanta 2017 k\u00f5nel.<\/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":[718,894,842,863],"tags":[1165],"class_list":["post-228748","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-opetused","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=228748"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228748\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=228748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=228748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=228748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}