最近のほとんどのWeb開発者と同様に、私はWebアプリとサイトの堅固なMVCアーキテクチャーの利点を十分に楽しんでいます。PHPでMVCを実行する場合、自動ロードは明らかに非常に便利です。
それぞれが独自の自動ロードを使用する異なるベースモジュールを組み込んでいる場合、これは明らかにより柔軟であるため、私はspl_autoload_register単純に単一の関数を定義するのが好きになりました。__autoload()しかし、私が書いたロード関数については、これまで素晴らしいと感じたことはありません。ロードする可能性のあるクラスを探すために、多くの文字列チェックとディレクトリスキャンが必要です。
たとえば、ベースパスが、として定義され、ディレクトリが、、およびという名前の単純な構造を持つアプリがあるとしPATH_APPます。私はよくファイルに名前が付けられ、適切なディレクトリ内にあるという名前付け構造を採用しています。モデルには通常、デフォルトで特定のスキームはありません。私は次のように登録されるこの構造のローダー関数を持っているかもしれません:modelsviewscontrollersIndexView.phpIndexController.phpspl_autoload_register
public function MVCLoader($class)
{
if (file_exists(PATH_APP.'/models/'.$class.'.php')) {
require_once(PATH_APP.'/models/'.$class.'.php');
return true;
}
else if (strpos($class,'View') !== false) {
if (file_exists(PATH_APP.'/views/'.$class.'.php')) {
require_once(PATH_APP.'/views/'.$class.'.php');
return true;
}
}
else if (strpos($class,'Controller') !== false) {
if (file_exists(PATH_APP.'/controllers/'.$class.'.php')) {
require_once(PATH_APP.'/controllers/'.$class.'.php');
return true;
}
}
return false;
}
それでも見つからない場合は、modelsディレクトリのサブディレクトリをスキャンする別の機能がある可能性があります。ただし、if / else、文字列チェック、ディレクトリスキャンはすべて私には非効率的であるように思われるので、改善したいと思います。
他の開発者が採用する可能性のあるファイルの命名と自動読み込みの戦略に非常に興味があります。私は、自動読み込みに代わるものではなく、効率的な自動読み込みに使用できる優れた手法を特に探しています。