Luokkien automaattinen lataus OOP:ssa PHP:ssä
Tiedät jo, että jotta voimme käyttää
mitä tahansa luokkaa, meidän on ladattava
se require-komennolla. Kun projektissa
on hyvin paljon luokkia, syntyy paljon
latauksia, joita on erittäin hankala kirjoittaa
ja vaikea hallita.
Tämän ongelman ratkaisemiseksi PHP:hen lisättiin luokkien automaattilataus. Automaattilataus mahdollistaa PHP:n lataamaan automaattisesti tiedoston luokalla, kun yritetään viitata tähän luokkaan koodissa. Luokat eivät kuitenkaan lataudu itsestään - ne on sijoitettava sivuston kansioihin erityisellä tavalla, noudattaen jotakin sopimusta luokkien tiedostojen ja kansioiden nimistä. Voit käyttää PHP:n sisäänrakennettua sopimusta, tai keksiä oman ja käyttää sitä.
Aloitetaan standardi PHP-sopimuksesta. Tämä sopimus perustuu siihen, että jos meillä on tietty luokkatiedosto, niin polku sivuston kansioihin tähän tiedostoon tulee vastata tiedoston nimitilaa, ja tiedoston nimi tulee vastata siinä olevan luokan nimeä. Samalla kansioiden ja tiedoston nimien tulee olla pienin kirjaimin.
Katsotaan esimerkkiä. Oletetaan, että meillä on seuraava luokka:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Sopimuksen mukaan tämän luokan tulee sijaita
kansiossa /core/admin/ tiedostossa
pagecontroller.php.
Käytetään nyt tiedostossa index.php
luokkaamme lataamatta sitä require-komennolla,
vaan käyttämällä automaattilatausta. Tätä varten tiedoston
alussa, jossa luokkia kutsutaan, tulee
kutsua funktio spl_autoload_register.
Tehdään näin:
<?php
spl_autoload_register(); // otetaan automaattilataus käyttöön
$obj = new Core\Admin\PageController; // luodaan olio rauhassa
?>
Tiedostossa index.php ota käyttöön automaattinen
luokkien lataus. Noudata sopimusta kansioiden
ja tiedostojen nimistä ja tee luokka Core\User,
luokka Core\Admin\Controller ja luokka
Project\User\Data. Tiedostossa index.php
luo näiden luokkien oliot.