PHPda OOPda Klasslarni Avtomatik Yuklash

Siz allaqachon bilasizki, biron bir klassdan foydalanish uchun uni require orqali ulashimiz kerak. Loyihada juda ko'p klasslar bo'lsa, juda ko'p ulanishlar paydo bo'ladi, ularni yozish juda qiyin va nazorat qilish mushkul.

Bunday muammoni hal qilish uchun PHPga klasslarni avtomatik yuklash qo'shildi. Avtomatik yuklash PHPga kodda klassga murojaat qilishga urinilganda avtomatik ravishda klass faylini yuklash imkonini beradi. Biroq, klasslar shunchaki yuklanmaydi - ularni saytning papkalariga qandaydir bir kelishuvga asosan, fayl va papka nomlari bo'yicha maxsus tartibda joylashtirish kerak. PHPning o'zidagi kelishuvdan foydalanish mumkin, yoki o'zingizning kelishuvingizni yaratish va undan foydalanish mumkin.

Keling, avval PHPning standart kelishuvini ko'rib chiqaylik. Ushbu kelishuv shundan iboratki, agar bizda klass saqlanadigan fayl bo'lsa, unda sayt papkalaridagi ushbu faylga bo'lgan yo'l fayl nomlar fazosi (namespace) bilan mos kelishi kerak, fayl nomi esa ichida saqlanadigan klass nomiga mos kelishi kerak. Bunda papka va fayl nomlari kichik harflarda yozilishi kerak.

Keling, misol orqali ko'rib chiqaylik. Faraz qilaylik, bizda quyidagi klass mavjud:

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

Kelishuvga ko'ra ushbu klass /core/admin/ papkasida pagecontroller.php faylida joylashgan bo'lishi kerak.

Keling endi index.php faylida biz o'z klassimizdan require orqali ulanmasdan, balki avtomatik yuklashdan foydalanib foydalanaylik. Buning uchun klasslar chaqiriladigan faylning boshida spl_autoload_register funksiyasini chaqirish kerak. Buni amalga oshiramiz:

index.php<?php
  spl_autoload_register(); // avtomatik yuklashni yoqamiz
  
  $obj = new Core\Admin\PageController; // xavotirsiz ob'ekt yaratamiz
?>
Задание 1

index.php faylida klasslarni avtomatik yuklashni yoqing. Papka va fayl nomlari bo'yicha kelishuvga rioya qilgan holda Core\User klassini, Core\Admin\Controller klassini va Project\User\Data klassini yarating. index.php faylida ushbu klasslarning ob'ektlarini yarating.