Autoloading von Klassen in OOP in PHP
Sie wissen bereits, dass wir, um eine
Klasse zu verwenden, diese über
require einbinden müssen.
Wenn ein Projekt sehr viele Klassen hat,
führt das zu vielen Einbindungen, die
sehr umständlich zu schreiben und schwer
zu kontrollieren sind.
Um dieses Problem zu lösen, wurde in PHP Autoloading von Klassen hinzugefügt. Autoloading ermöglicht es PHP, automatisch die Datei mit der Klasse zu laden, wenn im Code versucht wird, auf diese Klasse zuzugreifen. Allerdings werden Klassen nicht einfach so geladen - sie müssen speziell in den Ordnern der Website platziert werden, indem einer bestimmten Konvention für die Benennung von Dateien und Ordnern für Klassen gefolgt wird. Man kann die in PHP integrierte Konvention verwenden oder sich eine eigene ausdenken und dieser folgen.
Lassen Sie uns zunächst die Standardkonvention von PHP betrachten. Diese Konvention besagt, dass wenn wir eine bestimmte Datei mit einer Klasse haben, der Pfad durch die Website-Ordner zu dieser Datei mit dem Namensraum der Datei übereinstimmen muss, und der Dateiname muss mit dem Namen der darin enthaltenen Klasse übereinstimmen. Dabei müssen die Ordnernamen und der Dateiname in Kleinbuchstaben geschrieben sein.
Sehen wir uns ein Beispiel an. Nehmen wir an, wir haben die folgende Klasse:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Gemäß der Konvention sollte sich diese Klasse
im Ordner /core/admin/ in der Datei
pagecontroller.php befinden.
Lassen Sie uns nun in der Datei index.php unsere
Klasse verwenden, ohne sie über require einzubinden,
sondern indem wir Autoloading verwenden. Dazu sollte
am Anfang der Datei, in der Klassen aufgerufen werden,
die Funktion spl_autoload_register aufgerufen werden.
Machen wir das:
<?php
spl_autoload_register(); // Autoloading aktivieren
$obj = new Core\Admin\PageController; // Objekt problemlos erstellen
?>
Aktivieren Sie in der Datei index.php das automatische
Laden von Klassen. Folgen Sie der Konvention für die Benennung
von Ordnern und Dateien und erstellen Sie die Klasse Core\User,
die Klasse Core\Admin\Controller und die Klasse
Project\User\Data. Erstellen Sie in der Datei index.php
Objekte dieser Klassen.