0

オートローダーを使用してクラスを含めます。私が今行っているのは、「glob」を使用してさまざまなディレクトリを読み取り、それらを配列にプッシュすることです。これに対するより良い解決策はありますか?

$path = './';

$files = array_merge(
glob($path.'includes/classes/system/*.class.php'),
glob($path.'includes/classes/system/baseclasses/*.class.php'),
glob($path.'includes/classes/system/systementities/*.class.php'));

編集:

これを autoload クラス内で使用します。問題は、グロブでファイルを検索する必要があることです。これを行うより速い方法はありますか?

4

3 に答える 3

1

PHP に認識されていないクラスを使用しようとすると、オートロードがトリガーされます。include/を使用するrequireと、PHP は PHP.ini で指定したすべてのディレクトリを通過するinclude_pathため、 を使用する理由はありませんglobinclude_pathあなたの場合、に設定するだけで十分なはずです

/path/to/includes/classes/system/

ファイルを含める最速の方法は、 class2file マップを使用することです。ただし、これには、そのようなマップを作成し、アプリケーションを変更するときに更新しておく必要があります。

于 2010-11-20T18:32:04.620 に答える
1

PHP はすでにこの問題を解決しています。PHP の組み込み autoloaderを使用します。言語/フレームワークが提供する場合は、自分で作成しないでください。

于 2010-11-20T18:32:20.860 に答える
0
function __autoload($class) {
  $classfile = $class.'.class.php';
  $path = './includes/classes/system/';
  if (is_file($path.$classfile)) require_once($path.$classfile);
  if (is_file($path.'baseclasses/'.$classfile)) require_once($path.'baseclasses/'.$classfile);
  if (is_file($path.'systementities/'.$classfile)) require_once($path.'systementities/'.$classfile);
}

...これはまだ最善の方法ではありませんが、glob() を使用して回避できます。通常、すべてのシステム エンティティをロードする場合は、boot/config スクリプトにハードコーディングされた require() リストが必要です。クラスファイルを整理して取得する方法には多くのオプションがあります。スクリプトを検索する時間を短縮するには、ファイルツリーをインターフェイスと考えることができます。簡単にするために、必須ではないすべてのクラスを同じフォルダーに配置して、 is_file() 呼び出しを 1 つに減らすことができます。

私のシステムでは、それぞれの制御スクリプトとビューを含むフォルダーにグループ化されたオブジェクト クラスがあります。私の __autoload() 関数には、より単純な仕事があります -

$classfile = $path.$class.'/'.$class.'_class.php';
if (is_file($classfile)) require_once($classfile);
于 2010-11-20T20:12:21.390 に答える