2012-03-29 11 views
0

App\Model\Testを使用しようとすると、root/app/model/test.phpをロードするオートローダを使用するとよいですか?このようにして、すべてのクラスはそのネームスペースに応じて編成されます。名前空間をフォルダパスに変換する

これは良いアプローチですか?そうでない場合、なぜですか?何をお勧めしますか?

予期しないファイルがロードされないことを保証する特定の配列namespace => pathを定義する必要がありますか?このように私は毎回$map['App\Model\Test'] = 'root/app/model/test';のようなものを設定しなければならず、これは基本的にオートローダのすべての楽しみを削除します。ではない?

答えて

1
  1. それは、彼らがクラスマップ($map)を持っているとき、通常、オートローダが高速化されOOP
  2. で使用ではなく、「標準」的なアプローチであるが、それらに注入しました。これは、クラスがインスタンス化されているファイルを検索するためにincludeパスを実行する必要がないためです。それらに絶対ファイル名を付けると、それらをインクルードパスから切り離します。 $mapを指定すると、ファイルシステムベースの命名だけでなく、別の方法でクラスを編成することもできます。これとは別に、実際にこれを達成するために実行できるクラスマップジェネレータもあります。名前を変更したり、クラスを移動するたびに手作業で行う必要はありません。しかし、開発中は、標準のオートロードロジック(クラスマップなし)を使用するほうが便利です。なぜなら、同期ファイルとその中で宣言されたクラスを保持することは、かなり面倒で開発自体がほとんどないからです。定型コードの数を減らす

オートローダの唯一の目的ではありません。

  • あなたが実際にあなたのコードで必要とされるのみクラス宣言を読み込みます。宣言のすべてまたは一部ではない。 は、それがクラスに関してのあなたinclude_oncerequire_onceのみ
  • オートローディングであなたのクラスはロードファイルに焦点を当てていない起こる保証し
  • を使用しているもののみ。彼らは機能に焦点を当てる。