⊗ppOpNsCA 107 of 107 menu

Vlastná funkcia pre automatické načítanie tried v OOP v PHP

Často vás predvolené automatické načítanie nemusí uspokojiť z nejakých dôvodov. V takom prípade si môžete napísať vlastné automatické načítanie.

Na to je potrebné funkcii spl_autoload_register ako prvý parameter odovzdať vašu napísanú funkciu-spätné volanie. Táto funkcia sa bude volať, keď PHP zistí prístup k nenačítanej triede. Do parametra tejto funkcie bude vstupovať názov triedy s menným priestorom:

<?php spl_autoload_register(function($class) { // v premennej $class bude názov triedy s menným priestorom }); ?>

A povinnosťou funkcie bude podľa názvu triedy vykonať načítanie tejto triedy pomocou require. To znamená, že vnútri tejto funkcie musíme napísať naše pravidlo pre načítanie tried, teda naše dohodnuté pomenovanie.

Napíšme príklad nejakého vlastného automatického načítania. Nech napríklad hovoríme, že cesta k súboru triedy od koreňa webu bude rovnaká, ako menný priestor, ale so zachovaním veľkosti písmen.

To znamená, že ak máme triedu Core\Admin\PageController, tak cesta k nej by mala byť Core/Admin/PageController.php.

Ako vidíte, na transformáciu názvu triedy s jej menným priestorom je potrebné jednoducho zmeniť spätné lomky na priame, a k názvu triedy pridať .php. Urobme to:

<?php spl_autoload_register(function($class) { $filename = str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Nám sa však vytvorí relatívna cesta k súboru (vzhľadom na koreň webu). Lepšie je vytvoriť absolútnu cestu, takto:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $filename = $root . '/' . str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Existuje ešte jeden nuans. V rôznych operačných systémoch môže byť cesta cez priečinky s priamym lomkom alebo so spätným lomkom. Urobme náš kód nezávislým od operačného systému. Na to namiesto priameho lomku na oddelenie ciest budeme vkladať konštantu DIRECTORY_SEPARATOR, obsahujúcu správny lomok toho operačného systému, do ktorého sa práve spúšťa náš skript. Nakoniec získame nasledujúci kód:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $ds = DIRECTORY_SEPARATOR; $filename = $root . $ds . str_replace('\\', $ds, $class) . '.php'; require($filename); }); ?>

Otestujte si moju vytvorenú funkciu automatického načítania.

Vymyslite svoje vlastné pravidlo automatického načítania a implementujte ho.

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť