Samodejno nalaganje razredov v OOP v PHP
Že veste, da moramo za uporabo
kakršnega koli razreda vključiti
ga prek require. Ko je v projektu
zelo veliko razredov, dobimo veliko
priključkov, ki jih je zelo neprijetno pisati
in težko nadzorovati.
Za rešitev te težave je bil v PHP dodan avtomatsko nalaganje razredov. Samodejno nalaganje omogoča PHP-ju, da samodejno naloži datoteko z razredom ob poskusu dostopa do tega razreda v kodi. Vendar pa se razredi ne bodo samodejno naložili - postavljeni morajo biti po mapah spletnega mesta na poseben način, po katerem koli dogovoru o imenih datotek in map razredov. Lahko uporabite privzeti dogovor v PHP-ju, ali pa si izmislite svojega in ga uporabite.
Za začetek si poglejmo standardni dogovor PHP. Ta dogovor je v tem, da če imamo neko datoteko z razredom, potem mora pot po mapah spletnega mesta do te datoteke ujemati se z imenskim prostorom datoteke, ime datoteke pa se mora ujemati z imenom razreda, ki se nahaja v njem. Pri tem morajo biti imena map in datoteke v malih črkah.
Poglejmo si na primeru. Recimo, da imamo naslednji razred:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Po dogovoru mora biti ta razred nameščen
v mapi /core/admin/ v datoteki
pagecontroller.php.
Zdaj pa v datoteki index.php uporabimo
naš razred, ne da bi ga vključili prek require,
ampak z uporabo samodejnega nalaganja. Za to na začetku
datoteke, v kateri se kličejo razredi, je treba
poklicati funkcijo spl_autoload_register.
Naredimo to:
<?php
spl_autoload_register(); // vklopimo samodejno nalaganje
$obj = new Core\Admin\PageController; // mirno ustvarimo objekt
?>
V datoteki index.php vklopite samodejno
nalaganje razredov. Po dogovoru o imenih
map in datotek naredite razred Core\User,
razred Core\Admin\Controller in razred
Project\User\Data. V datoteki index.php
ustvarite objekte teh razredov.