Dieser Beitrag beschreibt wie vom Grundsatz Autoloader für PHP funktionieren.
Dies wird anhand von Beispielcode gezeigt der für ein besseres Verständnis auf ein Minimum reduziert ist.
Verzeichnisstruktur für das Beispiel:
File autoload.php
File testsimpleautoload.php
Mit dem Laden uns Ausführen unserer autoload.php wird mittels spl_autoload_register() unsere anonyme Funktion registriert, die letzlich das Laden der Klasse realisiert. Es muss nur sichergestellt sein, das der Pfad zur autoload.php auch auf das richtige Verzeichnis zeigt und sich dort alle Klassen für unser kleines Beispiel befinden. Bei den Versuch ein Objekt einer Klasse zu erstellen welche noch nicht geladen ist wird unsere registrierte Funktion aufgerufen und der Klassenname (hier "Class1") übergeben. Unsere Funktion geht davon aus dass die Klasse im selben Verzeichnis wie die autoload.php liegt und die Erweiterung .php hat. Der Pfad wird zusammengebaut und wenn die Datei vorhanden ist wird diese geladen.
Unsere Klasse Class1 soll nur zeigen wenn ein Objekt erstellt wird:
File Class1.php
Wir erhalten beim Aufruf von testsimpleautoload.php dann diese Ausgabe:
LG jspit
Dies wird anhand von Beispielcode gezeigt der für ein besseres Verständnis auf ein Minimum reduziert ist.
Verzeichnisstruktur für das Beispiel:
Code:
| |- project |-- class | |- autoload.php | |- class1.php | |- class2.php | |-- webroot |- testsimpleautoload.php
PHP-Code:
<?php
spl_autoload_register(function ($class) {
$file = __DIR__."/".$class.".php";
if (file_exists($file)) {
require $file;
}
else {
trigger_error("Error Autoload: file for class '$class' not found", E_USER_WARNING);
}
});
PHP-Code:
<?php
ini_set('display_errors', 1); //dev
error_reporting(-1); // dev
require __DIR__."/../class/autoload.php";
var_dump(" autoload geladen");
$class1 = new class1();
//Zum Test: Erzeugt eine Warnung und einen Fatal error
//$classX = new ClassX();
Unsere Klasse Class1 soll nur zeigen wenn ein Objekt erstellt wird:
File Class1.php
PHP-Code:
<?php
class Class1 {
public function __construct(){
var_dump(" Create Object class1");
}
}
Code:
string(17) " autoload geladen" string(21) " Create Object class1"