1

そのため、クラスをロードするために spl_autoload_register を使用しています。ただし、クラスには次の構造があります。

classes
    classfolder
       classfile

したがって、通常、それらを含めるときは次のようにしていました。

include('classes/modules/module_class.php');

spl_autoload_register を使用して、サブフォルダーをどのように処理しますか? 名前空間を使用するために php 5.3 にアップグレードする機能がありません。このようなことを行う必要がありますか?

$module = new modules_Module();

次に、spl_autoload_register に登録する関数は _ を展開し、最初の部分をクラス フォルダーとして使用し、2 番目の部分をクラス メソッドとして使用します。しかし、その後、クラス名を modules_Module に変更する必要がありますよね? もしそうなら、それは大丈夫ですか?または、これを行うより良い方法はありますか?

4

3 に答える 3

0

ファイルがクラス名からファイル名に移動できるように配置されている限り、オートローダー関数を好きなように実装できます。autoload 関数は、クラス名をディレクトリ パスに変換するだけでなく、クラス名とinclude、可能であれば適切なファイルを取得するだけです。

ただし、マッピングを比較的単純に保つことは、人間にとっても役立ちます。つまり、どのファイルを編集すればよいかがわかります。

たとえば、最初のすべてのクラスは というディレクトリに存在し、他のすべてのクラスMod_は というディレクトリに存在すると言えます。classes/modulesclasses/general

を使用して、1 つのクラスについて複数の可能性をチェックすることもできますがfile_exists、これには、PHP がファイルシステムをチェックすることと、ファイルがどこにあったかを覚えようとする人間の両方にとって、いくらかのコストがかかることに注意してください。

于 2013-04-11T00:23:46.780 に答える
0

基本的にはそれだけです。

名前空間(使用できません)とクラス名の命名規則(すべてのクラスの名前を変更する必要があります)に加えて、他の唯一の適切なオプションはクラスマップを構築することです:クラス名をフルパスにマップする配列それらを定義するファイルの。

この方法は、クラスが追加または変更されるたびにクラスマップを更新する必要があることを意味します。これは、自動化の最有力候補となるタスクです。Composer のオートロード機能の使用を検討してください。オンデマンドでこれを実行し、オートロード コードを自動的に生成できます。Composer は非常に優れているため、その機能の 90% を無視しても役に立ちます。

于 2013-04-10T23:59:36.593 に答える