2016-07-31 6 views
8

Laravelに関しては、Composerの自動ロード、つまり「psr-4」と「クラスマップ」オートロードの違いについて質問があります。PSR-4とクラスマップの自動読み込みの違いは?

PSR-4は、新しいファイルの変更または追加のたびにdumpautoloadを繰り返す必要はありません。classmapには、クラスを含む既存ファイルの変更または指定したディレクトリに新しいファイルを追加するたびにdumpautoloadが必要です。

答えて

21

PSR-4標準には、名前空間に基づいた厳密なファイルシステム構造が必要です。 srcディレクトリにAppという名前空間のアプリケーションがあるとしたら、すべてのサブネームスペースはサブディレクトリをミラーリングし、クラス名は.php拡張子のないファイル名と同じになります。

{ 
    "autoload": { 
     "psr-4": { "App\\": "src/" } 
    } 
} 

src/ 
    Foo/ 
     Bar.php <---- App\Foo\Bar class 
    Baz.php <---- App\Baz class 

オートローダーは、クラスのためにファイルを盗聴するダンプ・オートロードコマンドを必要としないので、どこ特定の完全修飾名のクラスを探すために、「知っている」と。

composer dump-autoload --optimize-autoloaderフラグまたは-oでパフォーマンスの問題が解決され、クラスマップの自動ロードと同様の方法でクラスマップが生成されます。一方


クラスマップの自動ロードは、ほぼすべての特定のファイルやディレクトリ構造を持っているあなたを必要としない、それが再帰的にそれらのクラスのために.php.inc指定されたディレクトリ内のファイルとファイルやスニフを通過します。

{ 
    "autoload": { 
     "classmap": ["src/", "lib/", "Something.php"] 
    } 
} 

これらのクラスは、次に、オートロードするために使用される(ベンダー/作曲ディレクトリ内のPHPファイルにキャッシュされた)リストに追加されます。

composer dump-autoloadコマンドを実行して、新しいクラスを追加する必要があります。

+0

クラスなしのプレーンなPHPファイルはどうですか?例えばどのように追加するグローバル関数の束とちょうどPHPファイル、? – Toskan

+1

@Toskan https://getcomposer.org/doc/04-schema.md#filesを参照してください。 – Finwe

関連する問題