これまでは手続き型のスタンドアロンオートローダー関数を使用して、spl_autoload_register()という名前で登録して、(通常は)名前空間を持つクラスを自動的に読み込みました。最近、私は、オートローダクラスの使用について、注目すべきPHPフレームワークのいくつかと関連している人に気付きました。PHPオートローダークラスと手続き型オートローダー関数
最近、私のコードのほとんどはオブジェクト指向ですが、このインスタンスでは基本的な機能よりもクラス「オートローダー」を使用する利点はありません。また、テスト容易性の面では、私のテストでclass_exists()チェックを使用して、手続き関数がファイルを正しくロードするかどうかを確認するのが得策です。
だから私の質問は3です:物事をリファクタリングするために私に動揺し、自動ロードクラスファイルに本格オブジェクトを使用して開始する可能性がありますどのような利点や機能(もしあれば)
- ?
- 明白なOOP機能の外に、ここでいくつか目立つ利点がありませんか?
- 手続き型またはクラスオートローダのケースを作成してください。以下は
UPDATE
私が採用可能性がある典型的な自動ロード機能のためのいくつかのサンプルコードです。メタコードなので、タイプミスはしないでください。私は、彼らの名前空間を反映するように私のディレクトリ構造を整理します。仮想的なexplode_namespaces()
関数は、理論的には静的メソッドとして静的メソッドとして、クラス内に静的メソッドとして含めることができるので、その利点の1つです。これらの異種の「ユーティリティ」関数を単一のクラスのメソッドとして結合する方がよりクリーンかもしれません。
function autoload($class_name)
{
$root = APP_LIBS; // a directory path constant set at config time
if ($namespaces = explode_namespaces($class_name)) {
$domain = array_shift($namespaces);
$root .= "/$domain/";
$class_name = array_pop($namespaces);
$directories = array();
foreach ($namespaces as $directory) {
$directories[] = $directory;
}
$root .= implode($directories, '/');
}
$file = "$root/$class_name.php";
if (file_exists($file)) {
include $file;
}
}
本当に質問とは関係がないので、質問から「回答」部分を削除しました。あなた自身の答えを追加することを検討する必要があります、それは他の人に役立つ可能性があります:) – James