2017-02-08 5 views
0

私はアプリケーションのカスタムインクルード機能を設計しました。これは、私の人生をはるかに簡単にすることを目的としていましたが、これはまったく逆のことであり、この電球の瞬間まで何時間も同じ種類のエラーをデバッグしました。PHP、カスタムインクルード機能 - 他のすべての関数と変数にアクセスできるようにするにはどうすればよいですか?

ファイルが関数に組み込まれているため、ファイル内の変数や関数などはグローバルではありません。

私はそれを動作させる方法はありますか、この全体の運動は無意味ですか?

コードについては下記を参照してください。

function import($a,$b = 1) { 
    global $options; 

     if($b == 1) $folder = "internal_functions"; 
     elseif($b == 2) $folder = "external_functions"; 
     else $folder = $b; 

     $file_path = $options['LIB_DIR']."/".$folder."/".$a.".php"; 

     if(@!file_exists($file_path)) { 

      $_criticalFiles = array("sessionService/session_loader", "databaseService/db_connection","userService/isLoggedIn"); 

      if(in_array($a,$_criticalFiles)) { 
       die("<center><h1>Critical Error.<br />Could not find {$a}.</h1></center>"); 
      } 

     } else { 
      require_once($file_path); 
     } 
    } 

おかげ

+0

'$ a.php'の中身を追加することはできますか? –

+0

'$ a.php'はファイルの変数名、' $ b'はフォルダの変数名です – DLipscombe

答えて

0

私はこのことをどうやって知りましたか、私はしませんでした。

代わりに、私はその後、ちょうどアレイ上のループの実行、ローカルおよび外部の両方のファイルのための

$filesInclude = array("file1","file2","file3","etc"); 

2異なるアレイとして配列内のすべてのファイルを置きます。 :)

0

それはscopeの問題です。あなたがそれ以外で利用できるようにする関数で作成された変数は、globalでなければなりません。

+0

私はこれを理解していますが、2鳥1石の方法としてやっている方法がありますか?個々の変数を初期化するには? – DLipscombe

+0

結び目に絡まっている - それぞれを処理する必要があります。外部ファイルに定義されている関数は処理されません。うーん.... [名前空間](http://php.net/manual/en/language.namespaces.php)*あなたのために何かをするかもしれませんが、わかりません。それは遅く、疲れました。見てみな。 – alanlittle

+0

助けてくれてありがとうございます - それをすべてカットして、import($ a、$ b)関数内にあったものをforループにスローし、インクルードを配列に入れてください。 :) – DLipscombe

関連する問題