Autoloaden van klassen in OOP in PHP
Je weet al dat om gebruik te maken van
een klasse, we deze moeten includeren
via require. Wanneer een project
heel veel klassen heeft, resulteert dat in veel
includes, die erg onhandig zijn om te schrijven
en moeilijk te controleren.
Om dit probleem op te lossen is in PHP autoloading van klassen toegevoegd. Autoloading staat PHP toe om automatisch het bestand met een klasse te laden bij een poging om die klasse aan te roepen in de code. Echter, klassen worden niet zomaar geladen - ze moeten op een speciale manier in de mappen van de website worden geplaatst, volgens een bepaalde conventie voor de namen van bestanden en mappen van klassen. Je kunt de ingebouwde conventie van PHP gebruiken, of je eigen bedenken en die gebruiken.
Laten we eerst de standaard conventie van PHP bespreken. Deze conventie houdt in dat als we een bestand met een klasse hebben, het pad via de mappen van de website naar dat bestand moet overeenkomen met de namespace van het bestand, en de bestandsnaam moet overeenkomen met de naam van de daarin opgeslagen klasse. Hierbij moeten de namen van de mappen en het bestand in kleine letters zijn.
Laten we een voorbeeld bekijken. Stel we hebben de volgende klasse:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Volgens de conventie moet deze klasse zich bevinden
in de map /core/admin/ in het bestand
pagecontroller.php.
Laten we nu in het bestand index.php onze
klasse gebruiken, zonder deze te includeren via require,
maar door gebruik te maken van autoloading. Hiervoor moet
in het begin van het bestand, waarin de klassen worden aangeroepen,
de functie spl_autoload_register worden aangeroepen.
Laten we dit doen:
<?php
spl_autoload_register(); // schakel autoloading in
$obj = new Core\Admin\PageController; // creëer gerust een object
?>
Schakel in het bestand index.php automatisch
laden van klassen in. Volg de conventie voor namen
van mappen en bestanden en maak de klasse Core\User,
de klasse Core\Admin\Controller en de klasse
Project\User\Data. Creëer in het bestand index.php
objecten van deze klassen.