⊗ppOpNsCA 107 of 107 menu

PHP OOP-де класстерді автоожалу үшін өз функцияңыз

Көбінесе әдепкі автоожалу сізді қандай да бір себептермен қанағаттандырмауы мүмкін. Мұндай жағдайда өз автоожалуыңызды жазуға болады.

Ол үшін 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); }); ?>

Тағы бір нюанс бар. Түрлі операциялық жүйелерде paperak бойынша жол тікелей көлбеу сызықпен немесе кері көлбеу сызықпен болуы мүмкін. Біздің кодты операциялық жүйеден тәуелсіз етейік. Ол үшін paperak бөлу үшін тікелей көлбеу сызықтың орнына 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ščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау