Դասերի ավտոմատ բեռնումը OOP-ում PHP-ում

Դուք արդեն գիտեք, որ որևէ դաս օգտագործելու համար մենք պետք է միացնենք այն require-ի միջոցով: Երբ նախագծում կան շատ դասեր, ապա ստացվում են բազմաթիվ միացումներ, որոնք շատ անհարմար է գրել և դժվար է վերահսկել:

Նման խնդիրը լուծելու համար PHP-ին ավելացվել է դասերի ավտոմատ բեռնում: Ավտոմատ բեռնումը թույլ է տալիս PHP-ին ավտոմատ կերպով բեռնել ֆայլը դասի հետ, երբ կոդում փորձ է արվում դիմել այդ դասին: Սակայն, պարզապես այդպես դասերը չեն բեռնվի - դրանք անհրաժեշտ է տեղադրել կայքի պանակներում հատուկ կերպով, հետևելով ինչ-որ պայմանավորվածության՝ ֆայլերի և դասերի պանակների անունների վերաբերյալ: Կարող եք օգտագործել PHP-ի ներկառուցված պայմանավորվածությունը, կամ հորինել ձեր սեփականը և օգտագործել այն:

Եկեք սկսենք PHP-ի ստանդարտ պայմանավորվածությունից: Այս պայմանավորվածությունը կայանում է նրանում, որ եթե մենք ունենք որոշակի ֆայլ դասով, ապա կայքի պանակներով այդ ֆայլի ուղին պետք է համընկնի ֆայլի namespace-ի հետ, իսկ ֆայլի անունը պետք է համընկնի դրա մեջ պահվող դասի անվան հետ: Միևնույն ժամանակ, պանակների և ֆայլի անունները պետք է լինեն ստորին ռեգիստրում:

Տեսնենք օրինակով: Ենթադրենք, մենք ունենք հետևյալ դասը:

/core/admin/pagecontroller.php<?php
  namespace Core\Admin;
  
  class PageController
  {
    
  }
?>

Պայմանավորվածության համաձայն, այս դասը պետք է տեղակայված լինի /core/admin/ պանակում՝ pagecontroller.php ֆայլում:

Եկեք այժմ index.php ֆայլում օգտագործենք մեր դասը, առանց այն require-ի միջոցով միացնելու, այլ օգտագործելով ավտոմատ բեռնումը: Դրա համար ֆայլի սկզբում, որտեղ կանչվում են դասերը, պետք է կանչել spl_autoload_register ֆունկցիան: Եկեք անենք դա:

index.php<?php
  spl_autoload_register(); // միացնում ենք ավտոմատ բեռնումը
  
  $obj = new Core\Admin\PageController; // հանգիստ ստեղծում ենք օբյեկտ
?>
Задание 1

index.php ֆայլում միացրեք դասերի ավտոմատ բեռնումը: Հետևելով պանակների և ֆայլերի անունների պայմանավորվածությանը, ստեղծեք Core\User դասը, Core\Admin\Controller դասը և Project\User\Data դասը: index.php ֆայլում ստեղծեք այդ դասերի օբյեկտները: