Autoload af klasser i OOP i PHP
Du ved allerede, at for at bruge
en hvilken som helst klasse, skal vi inkludere
den via require. Når et projekt har
meget mange klasser, resulterer det i mange
inkluderinger, som er meget besværlige at skrive
og svære at kontrollere.
For at løse dette problem blev autoload af klasser tilføjet i PHP. Autoload tillader PHP automatisk at indlæse filen med en klasse, når der forsøges adgang til denne klasse i koden. Dog vil klasser ikke blive indlæst af sig selv - de skal placeres i mapperne på sitet på en speciel måde, ved at følge en eller anden konvention om navngivning af filer og mapper for klasser. Man kan bruge den indbyggede konvention i PHP, eller finde på sin egen og bruge den.
Lad os starte med at se på PHP's standardkonvention. Denne konvention består i, at hvis vi har en fil med en klasse, så skal stien gennem sitets mapper til denne fil svare til filens namespace, og filnavnet skal svare til navnet på den klasse, der er gemt i den. Samtidig skal navnene på mapper og fil være med små bogstaver.
Lad os se på et eksempel. Antag, at vi har følgende klasse:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Ifølge konventionen skal denne klasse være placeret
i mappen /core/admin/ i filen
pagecontroller.php.
Lad os nu i filen index.php bruge
vores klasse, uden at inkludere den via require,
men ved at bruge autoload. For at gøre dette skal vi
i starten af filen, hvor klasserne kaldes,
kalde funktionen spl_autoload_register.
Lad os gøre det:
<?php
spl_autoload_register(); // aktiverer autoload
$obj = new Core\Admin\PageController; // skaber roligt et objekt
?>
I filen index.php skal du aktivere automatisk
indlæsning af klasser. Ved at følge konventionen om navngivning
af mapper og filer, skal du oprette klassen Core\User,
klassen Core\Admin\Controller og klassen
Project\User\Data. I filen index.php
skal du oprette objekter af disse klasser.