レイジークラスは、PHPが含まれています
-
26-09-2019 - |
質問
私は、クラスを含めるようにオートローダを使用しています。どのような私が今やっていることは別のディレクトリのを読んで、配列にそれらをプッシュする「グロブ」を使用しています。これに対するより良い解決策はありますか?
$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ます:
私は、自動ロードクラスの内部でこれを使用しています。問題は、私はグロブとファイルを検索しなければならないということです。これを行うにはより高速な方法はありますか?
解決
オートローディングがトリガされます。あなたは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);