2011-02-08 2 views
0

インクルードファイル内で宣言されているすべての変数を知りたい。phpの特定のインクルードファイルで定義された変数を取り出す方法は?

例のコードは次のとおりです。

  1. は、ファイルを含める:

    <?php 
    $a = 1; 
    $b = 2; 
    $c = 3; 
    $myArr = array(5,6,7); 
    ?> 
    
  2. メインファイル:get_defined_vars(の違いを利用する

    <?php 
    
    $first = get_defined_vars(); 
    include_once("include_vars.php"); 
    $second = get_defined_vars(); 
    
    $diff = array_diff($second ,$first); 
    var_dump($diff); 
    
    $x = 12; 
    $y = 13; 
    ?> 
    

私の試みは)ありません正確な情報を与えるようだに。 それは与える:

array(2) { 
    ["b"]=> 
    int(2) 
    ["c"]=> 
    int(3) 
} 

$ aと$ myArrが欠落しているようです。 私が使用できる他の方法は何ですか?

+3

は、グローバル変数を使用しないでください。それを繰り返してみましょう。グローバル変数は使用しないでください。オブジェクトなどのコンテナにラップされた変数を渡します。グローバルに電話するのではなく、私は周りを回って言ったことに注意してください。 [Dependency Injection](http://www.phparch.com/2010/03/static-methods-vs-singletons-choose-neither/)について... – ircmaxell

答えて

2

これを行うのは本当に良いことではありません。デバッグのためだけに必要であることを願っています。

$diff = array_diff(array_keys($second),array_keys($first)); 

あなたがより複雑な方法はTokenizerを使用されるだろう、あなたのファイルを含めない場合:次に、あなたはありませんそれらの値の間get_defined_varsリターン、という配列のキーの違いを見つける必要がありますすべての変数、でも非グローバルなものと、そのスクリプトで設定を解除したものを返します

$tokens = token_get_all(file_get_contents("include_vars.php")); 

foreach($tokens as $token) { 
    if ($token[0] == T_VARIABLE) 
     echo $token[1] . ', '; 
} 

(!)

+0

はい、デバッグの目的にのみ必要です。コアの実装の一部ではありません。 – DhruvPathak

+0

他の方法も提案できるのであれば、私も感謝します。 – DhruvPathak

+0

これらの配列の違いを見つけることが最良の方法です。 Tokenizerについて追加しましたが、私はそれを使用しません – meze

関連する問題