2011-08-15 3 views
0

私はstackoverflowの周りを見て、私はまだ私の質問への答えを見つけることができません。必要なファイルのみ、またはすべてのフレームワークをロードしていますか?

私は自分のカスタムフレームワークをウェブサイトに使用しています。現在、私のインデックスにはフレームワークが使用するすべてのクラスを読み込むためのインクルードを使用しています。

私のデータベースオブジェクトでは、テーブルごとにクラスのレイヤーがたくさんあるので、私はすべてのファイルを含めるために少しスクリプトを使用します。 (各テーブルには少なくとも4つのファイルがあります)

ここに私が現在読み込んでいるスニペットがあります。

// the constants are the directories to look for files 
$__dirs = array(CORE_PATH,CX_SETTINGS,BASE_MODEL,MODEL,CUSTOM_MODEL,CONTROLLER,PLUG_IN,HELPER_FUNCTIONS); 
$__accepted_ext = '.php'; 
foreach ($__dirs as $dir) { 
    if ($handle = opendir($dir)) { 
     // peer files first 
     while (false !== ($file = readdir($handle))) { 
      if ((strpos($file,$__accepted_ext) !== false)){ 
       require_once($dir.DS.$file); 
       //echo "$dir : $file : works \n"; // debug 
      } 
     } 
     closedir($handle); 
    } 
} 

この方法は、私が提供するすべてのディレクトリをスキャンし、すべての私のPHPファイルを含みます。

私の問題は、私が使用しているかどうかにかかわらず、このフレームワークのすべてのファイルをロードすることです。だから私はこれを処理するための最良の方法ではないと仮定し、私は不必要なオーバーヘッドを作成する可能性があります。

今、私は__autoload()関数について読んで、私はそれを私の代わりと考えています。しかし、これは何か私は(私も使用しないファイルも含めて)心配する必要がありますか?この問題を処理するために現在使用されている方法は何ですか?

EDIT:

注:含ますべてのファイルが、クラスではなく、誤って含まれるファイルです。 例:すべてのマイページで有効ではありませんが、コメントクラスを読み込むことがあります。何らかの方法で不要です

答えて

2

クラス定義で不必要なファイルを避けたい場合は、spl_autoload_register()または__autoload()が最適です。 autoload関数を登録すると、未定義クラスをインスタンス化しようとしているときに自動的に呼び出されます。 あなたが直面するかもしれない1つの問題は、クラスなどのサブディレクトリでディレクトリ構造を扱う方法です。簡単に解決できます。しかし、すべてのクラスが同じディレクトリにある場合、問題は発生しません。

0

ディレクトリの構造を作るか、クラスに別のエンディングを使用しようとしませんか? '.cls.php'のように。それはオーバーヘッドを減らすでしょう。自動的に実行する場合は、このファイルのみを含めます。しかし、私が知る限り、未使用のクラスのロードを避けることはできません。

関連する問題