⊗ppOpNsCA 107 of 107 menu

Сопствена функција за аутоматско учитавање класа у ООП у PHP

Често вас подразумевано аутоматско учитавање може не задовољавати из неких разлога. У таквом случају можете написати сопствено аутоматско учитавање.

За то треба функцији spl_autoload_register као први параметар проследити вашу написану функцију-коллбек. Ова функција ће бити позивана када PHP открије позивање неучитаној класи. У параметар ове функције ће стићи име класе са именским простором:

<?php spl_autoload_register(function($class) { // у променљивој $class ће бити име класе са именским простором }); ?>

А дужност функције је по имену класе обавити учитавање те класе преко require. То јест унутар ове функције треба да напишемо своје правило за учитавање класа, то јест своју конвенцију именовања.

Хајде да напишемо пример неке сопствене аутоматске учитавачке. Нека, на пример, кажемо да ће пут до фајла класе од корена сајта бити исти као и именски простор, али са очувањем регистра слова.

То јест, ако имамо класу Core\Admin\PageController, онда пут до ње треба да буде Core/Admin/PageController.php.

Као што видите, за претварање имена класе са њеним именским простором треба само заменити обрнуте косе црте правим, а имену класе додати .php. Хајде то да урадимо:

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

Међутим, добићемо релативни пут до фајла (у односу на корен сајта). Боље је направити апсолутни пут, ево овако:

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

Постоји још једна нијанса. У различитим оперативним системима пут кроз фолдере може бити са правом косом цртом или са обрнутом. Хајде да наш код учинимо независним од оперативног система. За то ћемо уместо праве косе црте за раздвајање путева користити константу DIRECTORY_SEPARATOR, која садржи исправну косу црту оне оперативне системе, у којој се тренутно покреће наш скрипт. На крају добијамо следећи код:

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

Тестирајте креирану функцију за аутоматско учитавање.

Смислите своје правило за аутоматско учитавање и имплементирајте га.

Српски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј