was ist/sind der/die Vorteil(e) mehrere zu haben spl_autoload_register
Beispiel:
spl_autoload_register('autoload_systems');
spl_autoload_register('autoload_thirdparties');
spl_autoload_register('autoload_services');
gegen:
mit einem
spl_autoload_register('autoload');
oder __autoload();
und dann die Logik innerhalb der Funktion ausführen.
eg:
$ftp = new systems_ftp();
$services = new services_cron_email();
Wenn du eine hast __autoload()
und Sie eine Bibliothek eines Drittanbieters einbeziehen, die auch eine hatte, würde sie verprügelt werden.
Registrierung mehrerer Autoloads mit spl_autoload_register()
stellt sicher, dass Sie Ihren Code mit vorhandenem Code (denken Sie an Bibliotheken usw.) einfügen können, ohne vorhandene/zukünftige Autoloads zu überschreiben oder zu überschatten.
zusätzlich PHP-Handbuch gibt an…
spl_autoload_register()
bietet eine flexiblere Alternative zum automatischen Laden von Klassen. Aus diesem Grund verwenden __autoload()
wird davon abgeraten und kann in Zukunft veraltet oder entfernt werden.
Ich denke, es ist nicht nötig, mehrere hinzuzufügen, aber es liegt an Ihrer Logik. Die Art und Weise, wie spl_autoload_register funktioniert, ist großartig. Angenommen, man hat Verzeichnisse von Drittanbietern und das wird normalerweise über den Namensraum verwaltet, der auch ihren Pfad darstellt. Betrachten Sie diese einfache Klasse als Autoloader-Klasse
class MyAutoLoader {
public function __construct()
{
spl_autoload_register( array($this, 'load') );
}
function load( $class )
{
$filepath="classes/".$class.'.php';
require_once( $filepath);
}
}
Fügen Sie dann diese Loader-Datei in die Indexdatei ein und erstellen Sie eine Instanz dieser Klasse:
$autoload = new MyAutoLoader();
Jetzt können Sie die Instanzen von Klassen direkt erstellen. Angenommen, wir haben die Klasse „Person“ im Verzeichnis classes\QMS\SERVICES\Person.php
und derselbe Pfad ist der Namensraum dieser Klasse
$person = new QMS\SERVICES\Person();
Wenn Sie nun new verwenden, wird überprüft, ob diese Klasse existiert, und der Wert als Zeichenfolge wird an die Funktion „load“ der Klasse „MyAutoLoader“ übergeben. und dort wird es aufgenommen. Oder Sie können die Funktion ‘load’ ändern, um den Pfad Ihrer Klassendateien zu korrigieren, Ihre if-Bedingungen setzen oder was auch immer getan werden muss, um die Pfade zu korrigieren.