Unterschied zwischen PSR-4 und Classmap Autoloading?

8

In Bezug auf Laravel habe ich eine Frage zum automatischen Autoloading des Composers, d. h. zum Unterschied zwischen "psr-4" und "classmap", erhalten.

1 Unterschied, den ich kenne, ist PSR-4 braucht nicht wiederholt dumpautoload für jede Änderung oder Hinzufügen neuer Dateien, während classmap dumpautoload für jede Änderung in vorhandenen Dateien benötigt, die Klassen enthalten oder eine neue Datei im angegebenen Verzeichnis hinzufügen.

    
RoMo 31.07.2016, 16:37
quelle

1 Antwort

22

PSR-4-Standard erfordert von Ihnen eine strikte Dateisystemstruktur basierend auf Namespaces. Angenommen, Sie haben eine App im Verzeichnis src mit App namespace, dann spiegeln alle Unter-Namespaces Unterverzeichnisse und Klassennamen sind dieselben wie Dateinamen ohne die Erweiterung .php .

%Vor%

Der Autoloader "weiß" dann, wo nach der Klasse eines bestimmten vollständig qualifizierten Namens gesucht werden soll, und benötigt daher nicht den Befehl dump-autoload, um Dateien nach Klassen zu durchsuchen.

Leistungsprobleme werden dann mit composer dump-autoload --optimize-autoloader flag oder -o gelöst, wodurch die Klassenzuordnung ähnlich wie beim automatischen Laden der Klassenzuordnung erstellt wird.

Auf der anderen Seite erfordert classmap autoloading nicht, dass Sie eine bestimmte Datei- oder Verzeichnisstruktur haben, sondern rekursiv die Dateien .php und .inc in angegebenen Verzeichnissen und Dateien durchlaufen schnüffle nach Klassen in ihnen.

%Vor%

Diese Klassen werden dann zu einer Liste hinzugefügt (in einer PHP-Datei im Verzeichnis vendor / composer zwischengespeichert), die zum automatischen Laden verwendet wird.

Jede neue Klasse muss dann zu dieser Liste hinzugefügt werden, indem Sie den Befehl composer dump-autoload ausführen.

    
Finwe 03.08.2016, 06:50
quelle

Tags und Links