⊗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ščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць