Klasių automatinis įkėlimas OOP PHP
Jūs jau žinote, kad norint panaudoti
bet kurią klasę, turime ją prijungti
per require. Kai projekte
yra labai daug klasių, susidaro daug
prijungimų, kuriuos labai nepatogu rašyti
ir sunku kontroliuoti.
Norint išspręsti šią problemą, PHP buvo pridėtas automatinis klasių įkėlimas. Automatinis įkėlimas leidžia PHP automatiškai įkelti failą su klase bandant kreiptis į šią klasę kode. Tačiau, klasės tiesiog taip neįsikels - jas reikia patalpinti pagal svetainės katalogus specialiu būdu, vadovaujantis kokiu nors susitarimu dėl failų ir katalogų pavadinimų. Galima naudoti į PHP įmontuotą susitarimą, arba sugalvoti savo ir jį naudoti.
Pirmiausia panagrinėkime standartinį PHP susitarimą. Šis susitarimas susideda iš to, kad jei mes turime tam tikrą failą su klase, tai kelias pagal svetainės katalogus iki šio failo turi sutapti su failo vardų erdve, o failo pavadinimas turi sutapti su jame esančios klasės pavadinimu. Tuo pačiu katalogų ir failo pavadinimai turi būti mažosiomis raidėmis.
Pažiūrėkime pavyzdžiu. Tarkime, mes turime šią klasę:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Pagal susitarimą ši klasė turi būti patalpinta
kataloge /core/admin/ faile
pagecontroller.php.
Dabar failo index.php naudokime
mūsų klasę, neprijungdami jos per require,
o naudodami automatinį įkėlimą. Tam failo pradžioje,
kuriame iškviečiamos klasės, reikia
iškviesti funkciją spl_autoload_register.
Padarykime tai:
<?php
spl_autoload_register(); // įjungiame automatinį įkėlimą
$obj = new Core\Admin\PageController; // ramiai sukuriame objektą
?>
Faile index.php įjunkite automatinį
klasių įkėlimą. Vadovaudamiesi susitarimu dėl
katalogų ir failų pavadinimų sukurkite klasę Core\User,
klasę Core\Admin\Controller ir klasę
Project\User\Data. Faile index.php
sukurkite šių klasių objektus.