Автозагрузкаи класҳо дар ООП дар PHP
Шумо аллакай медонед, ки барои истифода бурдани
як класи муайян, мо бояд онро тавассути
require пайваст кунем.
Вақте ки дар лоиҳа
хеле класҳои зиёд мавҷуданд, он гоҳ зиёд шудани
пайвастҳо ба амал меояд, ки навиштани онҳо хеле
норасо аст ва назорати онҳо душвор аст.
Барои ҳалли чунин мушкилот дар PHP автозагрузкаи класҳо илова шуд. Автозагрузка ба PHP имкон медиҳад, ки файли бо класро ба таври худкор бор кунад, вақте ки ба ин клас дар рамз муроҷиат карда мешавад. Аммо, класҳо ба таври оддӣ бор карда намешаванд - онҳо бояд дар папкаҳои сомона тавассути роҳи махсус ҷойгир карда шаванд, ба ягон эътилоф дар бораи номҳои файлҳо ва папкаҳои класҳо пайравӣ карда. Мо метавонем аз эътилофи дар PHP сохташуда истифода барем, ё худ эътилофи худро ихтироъ кунем ва аз он истифода барем.
Биёед аввал эътилофи стандартии PHP-ро таҳлил кунем. Ин эътилоф дар он иборат аст, ки агар мо як файли бо клас дошта бошем, он гоҳ роҳи папкаҳои сомона ба ин файл бояд бо фазои номи файл рост ояд, ва номи файл бояд бо номи класи нигоҳ дошта шуда дар он рост ояд. Дар ин ҳолат номҳои папкаҳо ва файл бояд дар реҷаи паст бошанд.
Биёед мисолро бубинем. Фарз кунем, ки мо класи зеринро дорем:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Мувофиқи эътилоф ин клас бояд дар
папкаи /core/admin/ дар файли
pagecontroller.php ҷойгир карда шавад.
Акнун биёед дар файли index.php аз
класи мо истифода барем, онро тавассути require
пайваст накарда,
аммо бо истифода аз автозагрузка.
Барои ин дар аввали
файл, ки класҳо даъват карда мешаванд, бояд
функсияи spl_autoload_register даъват карда шавад.
Биёед инро анҷом диҳем:
<?php
spl_autoload_register(); // автозагрузкаро фаъол мекунем
$obj = new Core\Admin\PageController; // оромияна объект эҷод мекунем
?>
Дар файли index.php автозагрузкаи
класҳоро фаъол кунед.
Ба эътилофи номҳои
папкаҳо ва файлҳо пайравӣ карда, класи Core\User,
класи Core\Admin\Controller ва класи
Project\User\Data созед.
Дар файли index.php
объектҳои ин класҳоро эҷод кунед.