Դասերի ավտոմատ բեռնումը OOP-ում PHP-ում
Դուք արդեն գիտեք, որ որևէ դաս օգտագործելու համար մենք պետք է միացնենք
այն require-ի միջոցով: Երբ նախագծում կան շատ դասեր,
ապա ստացվում են բազմաթիվ միացումներ, որոնք շատ անհարմար է գրել
և դժվար է վերահսկել:
Նման խնդիրը լուծելու համար PHP-ին ավելացվել է դասերի ավտոմատ բեռնում: Ավտոմատ բեռնումը թույլ է տալիս PHP-ին ավտոմատ կերպով բեռնել ֆայլը դասի հետ, երբ կոդում փորձ է արվում դիմել այդ դասին: Սակայն, պարզապես այդպես դասերը չեն բեռնվի - դրանք անհրաժեշտ է տեղադրել կայքի պանակներում հատուկ կերպով, հետևելով ինչ-որ պայմանավորվածության՝ ֆայլերի և դասերի պանակների անունների վերաբերյալ: Կարող եք օգտագործել PHP-ի ներկառուցված պայմանավորվածությունը, կամ հորինել ձեր սեփականը և օգտագործել այն:
Եկեք սկսենք PHP-ի ստանդարտ պայմանավորվածությունից: Այս պայմանավորվածությունը կայանում է նրանում, որ եթե մենք ունենք որոշակի ֆայլ դասով, ապա կայքի պանակներով այդ ֆայլի ուղին պետք է համընկնի ֆայլի namespace-ի հետ, իսկ ֆայլի անունը պետք է համընկնի դրա մեջ պահվող դասի անվան հետ: Միևնույն ժամանակ, պանակների և ֆայլի անունները պետք է լինեն ստորին ռեգիստրում:
Տեսնենք օրինակով: Ենթադրենք, մենք ունենք հետևյալ դասը:
<?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 ֆայլում
ստեղծեք այդ դասերի օբյեկտները: