⊗ppOpNsCA 107 of 107 menu

Vlastní funkce pro automatické načítání tříd v OOP v PHP

Často vás standardní automatické načítání nemusí z různých důvodů vyhovovat. V takovém případě si můžete napsat vlastní automatické načítání.

K tomu je potřeba předat vaši napsanou funkci-callback jako první parametr funkci spl_autoload_register. Tato funkce bude volána, když PHP detekuje přístup k nenatčené třídě. Parametr této funkce bude obsahovat název třídy s namespacem:

<?php spl_autoload_register(function($class) { // v proměnné $class bude název třídy s namespacem }); ?>

A úkolem funkce je na základě názvu třídy provést načtení této třídy pomocí require. To znamená, že uvnitř této funkce musíme nastavit vlastní pravidlo pro načítání tříd, tedy vlastní konvenci pojmenování.

Pojďme napsat příklad nějakého vlastního automatického načítání. Řekněme například, že cesta k souboru třídy od kořene webu bude stejná jako namespace, ale s zachováním velikosti písmen.

To znamená, že pokud máme třídu Core\Admin\PageController, tak cesta k ní by měla být Core/Admin/PageController.php.

Jak vidíte, pro transformaci názvu třídy s jejím namespace stačí změnit obrácená lomítka na přímá, a k názvu třídy přidat .php. Udělejme to:

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

Dostaneme však relativní cestu k souboru (vzhledem ke kořeni webu). Lepší je udělat absolutní cestu, takto:

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

Existuje ještě jeden nuance. V různých operačních systémech může být cesta přes složky s přímým lomítkem nebo s obráceným. Udělejme náš kód nezávislý na operačním systému. K tomu místo přímého lomítka pro oddělování cest budeme používat konstantu DIRECTORY_SEPARATOR, obsahující správné lomítko pro operační systém, ve kterém je právě spouštěn náš skript. Nakonec dostaneme následující 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 mou vytvořenou funkci automatického načítání.

Vymyslete své vlastní pravidlo automatického načítání a implementujte jej.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout