2012-01-29 11 views
0

内の未知の変数にグローバルな動作をエミュレートする、私が使用して終了しました:PHP:私のページに生のJavaScriptファイルを含めるには機能

function include_js($jsfile, $basepath = JSPATH){ 
    echo '<script type="text/javascript">'; 
    include($basepath . $jsfile); 
    echo '</script>'; 
} 

細かい動作、およびこれらのJSファイル内のPHPコードそれでも問題はない。前

  • 、同じコンテキストで実行された私のJavaScriptファイル内部で使用されるPHPコード:

    <script> 
        var hello = '<?php echo $id; ?>'; 
    </script> 
    

    ので、は、ここで問題です: しかし、ここでは私が前に使用したもののいくつかの擬似コードでありますページのものとして。

  • 今、include_js()関数のコンテキストで実行されます。

私のページの変数にアクセスできなくなりました。私はglobal $id;で修正できましたが、それは擬似コードでした。

実際、私はアクセスする必要がある変数は何もわかりません。

どのようにすれば問題を解決できますか?あなたが私が実際に何をしているのかより良い解決策があれば、私が話している問題なしで同じ目標を達成するためには、それは非常に高く評価されるでしょう!

答えて

1

を使用することができますあなたは、関数のローカルスコープにすべてのグローバル変数(しかしSuperglobals)をインポートできインクルードを行う。 (それはハンマーだと)私はそれが本当に良い解決策だとは思わないが、あなたは、あなたの質問に書いてますが、変数が使用されるかわからないので、あなたは次のようにそれらをローカライズすることができます:別の方法として

$varname = $GLOBALS['varname']; 

JSファイルを検査したり、ファイルの変数リストを提供したり、include関数に配列として追加することができます。コード例については、another answerを参照してください。

jsファイルを事前にインクルード(スローアウェイ)し、未定義の変数に関する警告を収集し、インポートしてから実際にインクルードすることもできます。一部more include/discard/return/variable related chunks of code

+0

私は、私の関数に使用する変数の配列を与えます。あなたの最初の例を通して 'extract()'関数を発見するための+1です。本当に素晴らしいです! – Pioul

1

グローバル変数を使用できますが、より堅牢な方法は独自の「定数データベース」を作成することです。次のようなものがあります。

class ConstantDB{ 
    public static function set($key, $value){ 
    } 

    public static function get($key){ 
    } 
} 

多くの場合、非常に便利です。あなたの特定の状況のた​​めに、あなたは

ConstantDB::set("my_id", $id); 

を使用することができますし、include_jsの内側に、あなたは

ConstantDB::get("my_id"); 
+0

これは良い答えです、私はすでにそれについて考えていましたが、私はむしろコードの全部を書き直す必要はありません。私は後であなたの答えを受け入れるでしょう。もっとうまくいくものがなければ=) – Pioul

関連する問題