Kazi yako ya kujipakia otomatiki ya madarasa katika OOP katika PHP
Mara nyingi kujipakia otomatiki kwa chaguo-msingi huenda haukukidhi mahitaji yako kwa sababu fulani. Katika hali kama hiyo unaweza kuandika kujipakia otomatiki yako mwenyewe.
Ili kufanya hivyo, kwenye kazi spl_autoload_register
unahitaji kupitisha kazi yako iliyoandikwa ya wito-wenyewe kama
kigezo cha kwanza. Kazi hii itaitwa
wakati PHP itagundua marejeo kwa
darasa ambalo halijapakiwa. Jina la darasa lenye nafasi ya jina
litaingia kwenye kigezo cha kazi hii:
<?php
spl_autoload_register(function($class) {
// katika kibadilishaji $class kutakuwa na jina la darasa lenye nafasi ya jina
});
?>
Na wajibu wa kazi huu ni kupakia darasa hilo
kupitia require kulingana na jina la darasa.
Yaani ndani ya kazi hii tunapaswa kuandika
kanuni yetu wenyewe ya kupakia madarasa, yaani
mkataba wetu wenyewe wa majina.
Wacha tuandike mfano wa kujipakia otomatiki yetu. Kwa mfano, wacha tuseme kwamba njia ya faili ya darasa kutoka kwenye mzizi wa tovuti itakuwa sawa na nafasi ya jina, lakini kwa kuhifadhi herufi kubwa na ndogo.
Yaani, ikiwa tuna darasa Core\Admin\PageController,
basi njia yake inapaswa kuwa Core/Admin/PageController.php.
Kama unavyoona, ili kubadilisha jina la darasa
na nafasi yake ya jina unahitaji tu kubadilisha
alama ya nyuma (\) kuwa alama ya mbele (/), na kwa jina la darasa
ongeza .php. Wacha tufanye hivi:
<?php
spl_autoload_register(function($class) {
$filename = str_replace('\\', '/', $class) . '.php';
require($filename);
});
?>
Hata hivyo, tutapata njia ya jamaa kwa faili (kutoka kwenye mzizi wa tovuti). Ni bora kutengeneza njia kamili, kama hii:
<?php
spl_autoload_register(function($class) {
$root = $_SERVER['DOCUMENT_ROOT'];
$filename = $root . '/' . str_replace('\\', '/', $class) . '.php';
require($filename);
});
?>
Kuna undani mwingine. Katika mifumo tofauti ya uendeshaji
nia ya kwenye folda inaweza kuwa na alama ya mbele (/)
au ya nyuma (\). Wacha tufanye msimbo wetu usitegemee
mfumo wa uendeshaji. Ili kufanya hivyo, badala ya
alama ya mbele (/) kwa kugawanya njia, tutatumia
kiwakilishi DIRECTORY_SEPARATOR,
kinachokuwa na alama sahihi ya mfumo ule wa uendeshaji
ambao skripti yetu inaendeshwa. Mwishowe tutapata msimbo ufuatao:
<?php
spl_autoload_register(function($class) {
$root = $_SERVER['DOCUMENT_ROOT'];
$ds = DIRECTORY_SEPARATOR;
$filename = $root . $ds . str_replace('\\', $ds, $class) . '.php';
require($filename);
});
?>
Jaribu kazi yangu iliyoundwa ya kujipakia otomatiki.
Undua kanuni yako mwenyewe ya kujipakia otomatiki na uitumikishe.