私は以下を行っています。まず、すべてのWebリクエストをインターセプトするためのインターセプトフィルタを作成し、コマンドラインコマンドで動作するバージョンも作成しました。
両方のインターセプタは、ブートストラップファイルに移動し、オートローダをセットアップします。このファイルは、オートロード機能とハッシュです。ハッシュの場合、キーはクラス名であり、値はクラスファイルへのファイルパスです。 autoload関数は単にクラス名を取り、ファイルに対してrequireを実行します。
パフォーマンスに関するヒントをいくつかご用意していますが、ファイルを定義する際に一重引用符を使用してください。解釈されないために少し速いので、_onceバージョンではなくrequire/includeを使用してください。一度実行し、前者はかなり速いビットです。
上記のことは素晴らしいことですが、実際にはクラスが1トンの大きなコードベースであっても、ハッシュはそれほど大きくなく、パフォーマンスは一度も心配していませんでした。さらに重要なことに、私たちはいくつかの擬似名前空間クラス命名規則と結婚していません。以下を参照してください。
他のオプションは、区切られた名前、擬似名前空間トリックです。名前空間に5.3が付いてくるので、これはあまり魅力的ではありません。コードベース全体でこれらの名前を変更することは面白くないので、これは総体的です。それにかかわらず、これはどのように動作し、すべてのコードのルートを想定します。それから、すべてのクラスは、そこに到達するのに必要なディレクトリトラバースに基づいて名前が付けられます。たとえば、 '_'のような文字で区切られます。クラス名の後にファイル名が付けられます。この方法では、クラスの場所は名前のエンコーディングであり、オートローダーはそれを使用できます。 really_long_crazy_class_names_MyClass以外のこのメソッドの問題は、各呼び出しでかなりの処理が行われることですが、それは時期尚早の最適化であり、再び名前空間が来ることです。
例えば、
/code root
ClassA ClassA.php
/subfolder
subFolder_ClassB ClassB.php