質問

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

$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'));

EDITます:

私は、自動ロードクラスの内部でこれを使用しています。問題は、私はグロブとファイルを検索しなければならないということです。これを行うにはより高速な方法はありますか?

役に立ちましたか?

解決

あなたがPHPを知っているされていないクラスを使用しようとしている時はいつでも

オートローディングがトリガされます。あなたはinclude / requireを使用した場合、PHPはあなたがphp.iniでごinclude_pathのために指定されたすべてのディレクトリを通過しますので、使用globする理由はそこにする必要があります。あなたのケースでは、

include_pathを設定するのに十分であるべきです
/path/to/includes/classes/system/

ファイルをインクルードするには、の最速の方法は、A class2fileマップを使用することです。しかし、これはあなたがあなたのアプリケーションを変更する場合、このようなマップを作成し、それが更新さを維持する必要があります。

他のヒント

PHPは、すでにあなたのため、この問題を解決しました。使用PHPの内蔵のオートローダに。言語/フレームワークがあなたのためにそれを提供したときに独自のロールはありません。

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);
}

...これはまだ偉大な方法ではありませんが、それはグロブ()を使用して、あなたの周りを取得します。あなたは一般的にあなたのsystementitiesのすべてをロードする場合は、ブート/ configスクリプトでハードコーディングされた必要()のリストがあるはずです。クラスファイルを整理し、フェッチする方法についての多くのオプションがあります。スクリプトの時間検索を減らすためには、インターフェイスとしてあなたfiletreeと考えることができます。簡略化のために、あなたは1まで呼び出す)is_fileを(還元、同じフォルダ内のすべての非必須のクラスを置くことができます。

私のシステムでは、私は、それぞれの制御スクリプトとビューのフォルダにグループ化されたオブジェクトクラスを持っています。マイ__autoload()関数は、単純な仕事をしている -

$classfile = $path.$class.'/'.$class.'_class.php';
if (is_file($classfile)) require_once($classfile);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top