Automatické načítání tříd v OOP v PHP

Už víte, že abyste mohli použít nějakou třídu, musíme ji načíst pomocí require. Když je v projektu velmi mnoho tříd, vzniká mnoho načtení, které je velmi nepohodlné psát a obtížně je kontrolovat.

Pro vyřešení tohoto problému byla v PHP přidána automatické načítání tříd. Automatické načítání umožňuje PHP automaticky načíst soubor s třídou při pokusu o přístup k této třídě v kódu. Nicméně, třídy se samy od sebe nenačtou - je nutné je umístit do složek webu speciálním způsobem, podle nějakého dohody o názvech souborů a složek tříd. Můžete používat vestavěnou dohodu v PHP, nebo si vymyslet vlastní a používat ji.

Pojďme nejprve rozebrat standardní dohodu PHP. Tato dohoda spočívá v tom, že pokud máme nějaký soubor s třídou, tak cesta přes složky webu k tomuto souboru musí odpovídat jmennému prostoru souboru, a název souboru musí odpovídat názvu třídy, která v něm je uložena. Přitom názvy složek a souboru musí být malými písmeny.

Podívejme se na příklad. Předpokládejme, že máme následující třídu:

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

Podle dohody by tato třída měla být umístěna v složce /core/admin/ v souboru pagecontroller.php.

Nyní v souboru index.php použijme naši třídu, bez načtení pomocí require, ale pomocí automatického načítání. K tomu na začátku souboru, ve kterém jsou volány třídy, je třeba zavolat funkci spl_autoload_register. Udělejme to:

index.php<?php
  spl_autoload_register(); // zapneme automatické načítání
  
  $obj = new Core\Admin\PageController; // klidně vytvoříme objekt
?>
Задание 1

V souboru index.php zapněte automatické načítání tříd. Podle dohody o názvech složek a souborů vytvořte třídu Core\User, třídu Core\Admin\Controller a třídu Project\User\Data. V souboru index.php vytvořte objekty těchto tříd.