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:
<?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:
<?php
spl_autoload_register(); // zapneme automatické načítání
$obj = new Core\Admin\PageController; // klidně vytvoříme objekt
?>
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.