Automatisches Laden von Klassen
Viele Entwickler, die objektorientierte Anwendungen entwickeln, erzeugen
für jede Klassendefinition eine eigene PHP-Quelldatei. Eines der größten
Ärgernisse ist die Notwendigkeit, am Anfang eines jeden Skripts eine lange
Liste von benötigten Include-Anweisungen (eine für jede Klasse) schreiben
zu müssen.
Die Funktion spl_autoload_register() registriert eine
beliebige Anzahl von Autoladern, die es ermöglichen, dass Klassen und
Schnittstellen automatisch geladen werden, wenn sie derzeit nicht definiert
sind. Durch das Registrieren von Autoladern erhält PHP einen letzten Versuch,
die Klasse oder Schnittstelle zu laden, bevor es unter Ausgabe einer
Fehlermeldung scheitert.
Jedes klassenähnliche Konstrukt kann auf die gleiche Weise automatisch
geladen werden. Dazu gehören Klassen, Schnittstellen, Traits und
Aufzählungen.
Achtung
Vor PHP 8.0.0 war es möglich, __autoload() zu
verwenden, um Klassen und Schnittstellen automatisch zu laden. Dies ist
jedoch eine weniger flexible Alternative zu
spl_autoload_register().
__autoload() ist seit PHP 7.2.0 veraltet und wurde in
PHP 8.0.0 entfernt.
Hinweis:
Die Funktion spl_autoload_register() kann mehrfach
aufgerufen werden, um mehrere Autoloader zu registrieren. Wenn von einer
Autoload-Funktion eine Exception ausgelöst wird, wird dieser Vorgang
jedoch unterbrochen und es werden keine weiteren Autoload-Funktionen
ausgeführt. Aus diesem Grund wird dringend davon abgeraten, von einer
Autoload-Funktion aus eine Exception auszulösen.
Beispiel #1 Autoload-Beispiel
Dieses Beispiel versucht die Klassen MyClass1
und
MyClass2
aus den entsprechenden Dateien
MyClass1.php und MyClass2.php
zu laden.
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
Beispiel #2 Weiteres Autoload-Beispiel
Dieses Beispiel versucht, das Interface ITest
zu laden.
<?php
spl_autoload_register(function ($name) {
var_dump($name);
});
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
?>
Beispiel #3 Verwenden des Composer-Autoloaders
Der » Composer erzeugt eine vendor/autoload.php
,
die so konfiguriert ist, dass sie die vom Composer verwalteten Pakete
automatisch lädt. Durch das Einbinden dieser Datei können diese Pakete
ohne zusätzlichen Aufwand verwendet werden.
<?php
require __DIR__ . '/vendor/autoload.php';
$uuid = Ramsey\Uuid\Uuid::uuid7();
echo "Neue UUID erzeugt -> ", $uuid->toString(), "\n";
?>