mehrere spl_autoload_register

Lesezeit: 2 Minuten

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();

Benutzer-Avatar
Alex

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.

  • aber mehrere spl_autoload_register zu haben ist langsamer als nur eines zu verwenden?

    – Gino Sullivan

    20. November 2011 um 2:20 Uhr

  • @GinoSullivan Vielleicht, aber ich würde das kaum als Entschuldigung dafür verwenden, Code zu schreiben, der verwendet __autoload().

    – Alex

    20. November 2011 um 2:24 Uhr

Benutzer-Avatar
zoomi

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.

1158050cookie-checkmehrere spl_autoload_register

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy