Klasside automaatlaadimine OOP-s PHP-s
Te juba teate, et klassi kasutamiseks peame selle
ühendama läbi require. Kui projektis on
väga palju klasse, tekib palju ühendusi, mida on
väga ebamugav kirjutada ja raske kontrollida.
Selle probleemi lahendamiseks lisati PHP-sse klasside automaatlaadimine. Automaatlaadimine võimaldab PHP-l automaatselt laadida klassi faili proovides seda klassi koodis kasutada. Siiski ei laadita klasse iseenesest - need tuleb paigutada saidikaustadesse spetsiaalsel viisil, järgides mõnda kokkulepet failide ja kaustade nimede kohta. Võite kasutada PHP-sse sisseehitatud kokkulepet või mõelda välja oma ja seda kasutada.
Alustuseks vaatame standardset PHP kokkulepet. See kokkulepe seisneb selles, et kui meil on mõni klassi fail, siis tee saidikaustades selleni failini peab ühtima faili nimeruumiga ja faili nimi peab ühtima selles hoitava klassi nimega. Samal ajal peavad kaustade ja faili nimed olema väiketähtedega.
Vaatame näidet. Oletame, et meil on järgmine klass:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Kokkuleppe kohaselt peaks see klass asuma
kaustas /core/admin/ failis
pagecontroller.php.
Kasutame nüüd failis index.php meie klassi,
ühendamata seda läbi require, vaid kasutades
automaatlaadimist. Selleks tuleb faili alguses,
kus kutsutakse välja klasse, kutsuda funktsioon
spl_autoload_register. Teeme selle:
<?php
spl_autoload_register(); // lülitame sisse automaatlaadimise
$obj = new Core\Admin\PageController; // loome rahulikult objekti
?>
Failis index.php lülitage sisse automaatne
klasside laadimine. Järgides kokkulepet kaustade
ja failide nimede kohta looge klass Core\User,
klass Core\Admin\Controller ja klass
Project\User\Data. Failis index.php
looge nende klasside objektid.