⊗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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне