spl_autoload_register()
Mit dieser Option können Sie mehrere Funktionen (oder statische Methoden aus Ihrer eigenen Autoload-Klasse) registrieren, die PHP in einen Stapel / eine Warteschlange stellt und nacheinander aufruft, wenn eine "neue Klasse" deklariert wird.
Also zum Beispiel:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
Im obigen Beispiel ist "MyClass" der Name der Klasse, die Sie instanziieren möchten. PHP übergibt diesen Namen als Zeichenfolge an spl_autoload_register()
, sodass Sie die Variable abrufen und damit die entsprechende Klasse / Datei "einschließen" können . Infolgedessen müssen Sie diese Klasse nicht speziell über eine include / require-Anweisung einschließen ...
Rufen Sie einfach die Klasse auf, die Sie instanziieren möchten, wie im obigen Beispiel, und da Sie eine eigene Funktion (via spl_autoload_register()
) registriert haben , die herausfindet, wo sich alle Ihre Klassen befinden, verwendet PHP diese Funktion.
Der Vorteil der Verwendung spl_autoload_register()
besteht darin, dass __autoload()
Sie nicht in jeder von Ihnen erstellten Datei eine Autoload-Funktion implementieren müssen. spl_autoload_register()
Außerdem können Sie mehrere Autoload-Funktionen registrieren, um das Autoloading zu beschleunigen und es noch einfacher zu machen.
Beispiel:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');
class MyAutoloader
{
public static function ClassLoader($className)
{
//your loading logic here
}
public static function LibraryLoader($className)
{
//your loading logic here
}
In Bezug auf spl_autoload heißt es im Handbuch:
Diese Funktion soll als Standardimplementierung für verwendet werden __autoload()
. Wenn nichts anderes angegeben ist und spl_autoload_register()
ohne Parameter aufgerufen wird, werden diese Funktionen für einen späteren Aufruf von verwendet __autoload()
.
Praktischer ausgedrückt: Wenn sich alle Ihre Dateien in einem einzigen Verzeichnis befinden und Ihre Anwendung nicht nur .php-Dateien, sondern auch benutzerdefinierte Konfigurationsdateien mit .inc-Erweiterungen verwendet, besteht eine Strategie darin, ein Verzeichnis hinzuzufügen, das alle enthält Dateien zu PHPs Include-Pfad (via set_include_path()
).
Und da Sie auch Ihre Konfigurationsdateien benötigen, würden Sie spl_autoload_extensions()
die Erweiterungen auflisten, nach denen PHP suchen soll.
Beispiel:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
Da spl_autoload die Standardimplementierung der __autoload()
Magic-Methode ist, ruft PHP spl_autoload auf, wenn Sie versuchen, eine neue Klasse zu instanziieren.
Hoffe das hilft...