Laravelに関して、Composer自動ロード、つまり「psr-4」と「クラスマップ」自動ロードの違いについての質問がありました。
私が知っている1つの違いは、PSR-4は新しいファイルの変更または追加ごとにdumpautoload
を繰り返す必要がないのに対し、クラスマップはクラスを含む既存のファイルのすべての変更または新しいファイルの追加のためにdumpautoload
を必要とすることです。指定されたディレクトリ。
PSR-4標準名前空間に基づく厳密なファイルシステム構造が必要です。 src
ディレクトリにApp
名前空間のあるアプリがあるとすると、すべてのサブ名前空間はサブディレクトリをミラーリングし、クラス名は.php
拡張子のないファイル名と同じになります。
{
"autoload": {
"psr-4": { "App\\": "src/" }
}
}
src/
Foo/
Bar.php <---- App\Foo\Bar class
Baz.php <---- App\Baz class
次に、オートローダーは、特定の完全修飾名のクラスを探す場所を「認識」しているため、クラスのファイルをスニッフィングするためにdump-autoloadコマンドを必要としません。
次に、composer dump-autoload --optimize-autoloader
フラグまたは-o
を使用してパフォーマンスの問題を解決します。これにより、クラスマップの自動読み込みと同様の方法でクラスマップが生成されます。
一方、classmap autoloadingでは、特定のファイルまたはディレクトリ構造をほとんど必要とせず、指定されたディレクトリおよびファイル内の.php
および.inc
ファイルを再帰的に通過します。それらのクラスを嗅ぐ。
{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}
これらのクラスは、オートロードに使用されるリスト(PHPファイルにキャッシュされる))に追加されます。
次に、composer dump-autoload
コマンドを実行して、新しいクラスをそのリストに追加する必要があります。