Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

6. diel - Štandardy jazyka PHP - PSR-4 a autoloader

V minulej lekcii, Štandardy jazyka PHP - Implementácia PSR-3 , sme dokončili špecifikáciu PSR-3, ktorá sa zaoberá logovaním. Dnešná tutoriál bude venovaný PSR-4, ktorá je zatiaľ posledný PHP špecifikácií od skupiny PHP-FIG.

PSR-4 - Autoloader

PSR-4 sa týka autoloadingu a vôbec spôsobu pomenovanie tried a radenie tried do menných priestorov. V typickej webovej aplikácii iste používame hneď niekoľko knižníc tretích strán. Ako by to vyzeralo, keby si každý robil adresárovú štruktúru po svojom alebo dokonca nepoužíval menné priestory?

Táto PSR popisuje špecifikáciu pre autoloading (automatické načítanie) tried zo súborov a priečinkov. Umožňuje súčinnosť medzi rôznymi systémami a môže byť dodatočne použitá s ktoroukoľvek inou autoloadingovou špecifikácií vrátane PSR-0 (čo je zastaraný predchodca PSR-4). PSR tiež popisuje kde ukladať súbory, ktoré budú neskôr načítané Autoloader. Ukážkové použitie PSR-4 je uvedené v minulom článku, kde je kód rozdelený do menných priestorov a koreňovú zložkou je zložka vendor.

Špecifikácia

  1. Pojem "trieda" bude referovať na triedy, rozhrania, Trait a ďalšie podobné štruktúry.
  2. Plný názov triedy (fully qualified class name) má túto podobu:
\<JmennyProstor>(\<VnoreneJmenneProstory>)*\<NazevTridy>
  • Plný názov triedy MUSÍ obsahovať názov menného priestoru najvyššej úrovne, známy tiež ako "vendor namespace" (menný priestor výrobca).
  • Plný názov triedy MÔŽE obsahovať jeden alebo viac názvov vnorených menných priestorov.
  • Plný názov triedy MUSÍ byť zakončený názvom triedy.
  • Podčiarknutia nemajú v žiadnej časti plného názvu triedy špeciálny význam.
  • Abecedné znaky v plnom názve triedy MÔŽU byť kombináciou malých a veľkých písmen.
  • Všetky názvy tried MUSÍ byť uvádzané s ohľadom na závislosť na veľkých a malých písmenách (case-sensitive).

Pridajme si k špecifikácii nejaký ľudskejší popis. Triedy delíme do menných priestorov, kde prvý menný priestor označuje meno výrobcu, potom nasleduje ľubovoľný počet ďalších vnorených podprostor a všetko končí názvom triedy. Teda napr. ItNetwork \ Články \ SpravceClanku. Vďaka uvedeniu výrobca sa aplikácia sprehľadní a predíde sa kolíziám názvov tried (keď si 2 výrobcovia pomenujú triedu User a podobne)

3. Keď načítame súbor, ktorý zodpovedá plnému názvu triedy ...

  • Séria jedného alebo viacerých počiatočných menných priestorov a podprostor bez úvodného oddeľovača menných priestorov (\) v plnom názve triedy korešponduje aspoň s jednou koreňovou zložkou. Túto sériu nazývame predpona menného priestoru (namespace prefix).
  • Séria menných podprostor za predponou korešponduje s podadresári v koreňovom priečinku, kedy oddeľovača menných priestorov (\) reprezentujú oddeľovača adresárov (/). Názvy podpriečinkov MUSÍ zodpovedať názvami menných podprostor s ohľadom na veľké a malé písmená.
  • Zakončujúca názov triedy korešponduje s názvom súboru s príponou .php. Názov súboru MUSÍ súhlasiť s názvom triedy.

Ak nahradíme spätné lomítka normálnymi, mal by plný názov triedy odpovedať ceste, kde je uložená. Z tejto cesty nemusí zodpovedať určitá počiatočná časť plného názvu.

4. Implementácia Autoloader NESMIE vyhadzovať výnimky, NESMIE vyvolávať chyby žiadne úrovne a NEMALA BY vracať hodnotu.

Dodatok ohľadom vyhadzovanie výnimiek som osobne nepochopil, pretože ak sa autoloading nepodarí, nechceme, aby aplikácia ďalej pokračovala (čo bez načítanej triedy ani nemôže) a zároveň sa nám veľmi hodí stack trace výnimky, pretože tu vidíme kde sa snažíme použiť neexistujúci triedu.

Príklady

Tabuľka nižšie ukazuje cestu, ktorá korešponduje a plným názvom triedy, ďalej predponu (namespace prefix) a koreňovú zložku.

Plný názov triedy predpona koreňová zložka výsledná cesta
\ Acme \ Log \ Writer \ File_Writer Acme \ Log \ Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/Fi­le_Writer.php
\ Aura \ Web \ Response \ Status Aura \ Web / Path / to / aura-web / src / /path/to/aura-web/src/Respon­se/Status.php
\ Symfony \ Core \ Request Symfony \ Core ./vendor/Symfo­ny/Core/ ./vendor/Symfo­ny/Core/Reques­t.php
\ Zend \ Acl Zend / Usr / includes / Zend / /usr/includes/Zen­d/Acl.php
Môžete zhliadnuť oficiálny príklady implementácie Autoloader podľa tejto špecifikácie. Tieto ukážky NESMIE byť brané ako časť špecifikácie a MÔŽU sa časom zmeniť. Ďalšie ukážku máte v už spomínanom minulom článku. Ohľadom PHP špecifikácií to je zatiaľ všetko a preto sa s vami lúčim :) Dúfam, že sa mi podarilo naučiť vás novým veciam a písať štandardnejší a hlavne kvalitnejšie kód.

V budúcej lekcii, Štandardy jazyka PHP - PSR-6 (cachovací rozhranie) , si vysvetlíme podstatu cachovacího rozhranie a niektoré dôležité pojmy s ním súvisiace.


 

Predchádzajúci článok
Štandardy jazyka PHP - Implementácia PSR-3
Všetky články v sekcii
Štandardy jazyka PHP
Preskočiť článok
(neodporúčame)
Štandardy jazyka PHP - PSR-6 (cachovací rozhranie)
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity