En ce qui concerne Laravel, j'ai eu une question sur Composer autoloading c'est-à-dire la différence entre "psr-4" et "classmap" autoloading.
1 différence que je sais, c'est que le PSR-4 n'a pas besoin de dumpautoload
répété pour chaque modification ou ajout de nouveaux fichiers alors que classmap a besoin de dumpautoload
pour chaque modification des fichiers existants contenant des classes ou ajout de nouveau fichier dans répertoire spécifié.
norme PSR-4 requiert de vous une structure de système de fichiers stricte basée sur des espaces de noms. Supposons que vous ayez une application dans le répertoire src
avec l'espace de noms App
, tous les sous-espaces de noms refléteront les sous-répertoires et les noms de classe seront les mêmes que les noms de fichiers sans .php
extension.
{
"autoload": {
"psr-4": { "App\\": "src/" }
}
}
src/
Foo/
Bar.php <---- App\Foo\Bar class
Baz.php <---- App\Baz class
L'autochargeur "sait" alors où chercher la classe d'un certain nom complet et n'a donc pas besoin de la commande dump-autoload pour flairer les fichiers des classes.
Les problèmes de performances sont ensuite résolus avec composer dump-autoload --optimize-autoloader
drapeau, ou -o
, qui générera un mappage de classe de la même manière que le chargement automatique de classmap.
D'un autre côté, autochargement de classmap ne nécessite pas que vous ayez presque n'importe quelle structure de fichier ou de répertoire, il passera récursivement par .php
et .inc
fichiers dans les répertoires et fichiers spécifiés et renifler pour les classes qu'ils contiennent.
{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}
Ces classes sont ensuite ajoutées à une liste (mise en cache dans un PHP dans le répertoire vendeur/compositeur) qui est utilisée pour le chargement automatique.
Toute nouvelle classe doit alors être ajoutée à cette liste en exécutant composer dump-autoload
commande.