30

PSR 標準を使用してファイルを検索するか、composer にディレクトリを指定してクラスをスキャンできることを理解しています。ドキュメントでは、PSR-4標準の使用が推奨されています。composer が最適化されたオートローダーを作成するオプションもあります。これは、基本的に完全な classmap を生成します。ロードする最善の方法がクラスマップを使用する場合、なぜ PSR-4 を使用する必要があるのでしょうか?

とにかく整理するのに良い方法なので、ディレクトリ構造を維持することは私にとって理にかなっています。ただし、論理的なオプションは、開発マシンで PSR-4 の読み込みを使用してから、運用環境でクラスマップを使用することです。そうすれば、新しいクラスを作成するたびにクラスマップを再構築する必要はありませんが、実稼働環境ではデプロイ プロセスの一部として完全なクラスマップが作成され、追加の呼び出しは必要ありません。

./composer.phar dump-autoload -o
4

6 に答える 6

34

classmap が実際に高速な場合、composer で PSR-0 または PSR-4 オートロードを使用するのはなぜですか?

そのほうが実用的だからです。

本番環境では、新しいクラスを追加しないため、classmap ( with composer dumpautoload -o) を使用できますが、開発環境では、PSR-0 または PSR-4 によって提供される柔軟性 (つまり、新しいクラスを追加するときに何もする必要がない) が興味深いです。 .

更新:も使用できますcomposer install -o。より簡単です。

于 2014-04-02T09:33:03.087 に答える
11

クラスを追加/変更した場合は、次のことを行う必要があります。

  • classmap: composer dumpautoload (おそらく composer.json も新しい classmap エントリで更新します)
  • psr-0:何もない
  • psr-4:何もない

したがって、基本的に、新しく作成したクラスがオートローダーに正しく含まれているかどうかを心配することなく、psr-4 と psr-0 を自由に使用できます。それに加えて、名前空間を表すライブラリの適切なディレクトリ構造を自由に取得できます。

オートローダー ファイル:

  • クラスマップ: vendor/composer/autoload_classmap.php
  • psr-0:ベンダー/作曲家/autoload_namespaces.php
  • psr-4:ベンダー/作曲家/autoload_psr4.php
于 2014-04-02T07:07:36.163 に答える
-1

質問は誤解を招くものです。

自動ロードオプションとしての「classmap」は、より正確には、一致する名前のクラスを持つすべてのファイルへの参照を持つ単なるダムディレクトリグロブです。次に、そのすべてを「クラスマップ配列」にコンパイルします。これには、PSR-0 ルールも含まれています。

したがって、PSR-0 とクラスマップは同じクラスマップを使用します。つまり、文字通り違いはありません。

PSR-0 コードを自動ロードするため、PSR-0 を使用します。

于 2014-04-03T08:12:14.853 に答える