⊗ppOpNsCA 107 of 107 menu

Saját függvény az osztályok automatikus betöltéséhez OOP-ban PHP-ben

Gyakran előfordulhat, hogy az alapértelmezett autoloader valamilyen okból nem felel meg az elvárásainak. Ilyen esetben írhatunk egy saját autoloadert.

Ehhez a spl_autoload_register függvénynek első paraméterként át kell adnunk egy általunk írt callback függvényt. Ez a függvény akkor hívódik meg, amikor a PHP észleli, hogy egy még betöltetlen osztályt próbálnak használni. Ennek a függvénynek a paraméterébe kerül az osztály neve a névterekkel együtt:

<?php spl_autoload_register(function($class) { // a $class változóban az osztály neve lesz a névterekkel }); ?>

A függvény feladata pedig, hogy az osztály neve alapján betöltse az adott osztályt a require segítségével. Vagyis ezen függvényen belül meg kell írnunk a saját szabályunkat az osztályok betöltésére, azaz egy saját elnevezési konvenciót.

Írjunk egy példát egy saját autoloaderre. Tegyük fel például, hogy azt szeretnénk, hogy az osztályfájl elérési útja a webroot könyvtárhoz képest ugyanaz legyen, mint a névtér, de a karakterek észlelésének megőrzésével.

Vagyis, ha van egy Core\Admin\PageController osztályunk, akkor a hozzá tartozó elérési út Core/Admin/PageController.php legyen.

Amint látható, az osztály nevének a névterekkel való átalakításához egyszerűen a fordított perjeleket cserélni kell normál perjelekre, majd hozzá kell fűzni az .php kiterjesztést. Valósítsuk ezt meg:

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

Azonban így relatív elérési utat kapunk a fájlhoz (a webroot könyvtárhoz képest). Jobb, ha abszolút elérési utat használunk, a következőképpen:

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

Van még egy árnyalata. Különböző operációs rendszerekben a könyvtár elválasztójele lehet perjel vagy backslash. Tegyük függetlenné a kódunkat az operációs rendszertől. Ehhez a közvetlen perjel helyett a DIRECTORY_SEPARATOR konstanst használjuk, amely tartalmazza az adott operációs rendszernek megfelelő elválasztó karaktert, amelyen a szkriptünk fut. Végül a következő kódot kapjuk:

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

Tesztelje a létrehozott autoloader függvényemet.

Találjon ki egy saját autoloader szabályt és valósítsa meg.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás