2011-02-08 65 views
0

我想知道包含文件中已聲明的所有變量。如何檢索在PHP中的特定包含文件中定義的變量?

示例代碼:

  1. 包含文件:

    <?php 
    $a = 1; 
    $b = 2; 
    $c = 3; 
    $myArr = array(5,6,7); 
    ?> 
    
  2. 主文件:

    <?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; 
    ?> 
    

我試圖使用get_defined_vars的差異()不似乎給出了準確的信息上。 它提供:

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

$和$ myArr,該似乎丟失。 我可以使用哪些其他方法?

+3

不要使用全局變量取消設置的。讓我重複一遍。不要使用全局變量。傳遞包裝在容器(如對象)中的變量。請注意,我表示通過,而不是全局通話。閱讀[依賴注入](http://www.phparch.com/2010/03/static-methods-vs-singletons-choose-neither/)... – ircmaxell 2011-02-08 14:06:48

回答

2

這樣做確實不是一件好事,希望它只是用於調試。然後,你應該找到陣列的鍵是get_defined_vars返回,而不是它們的值之間的差異:

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

如果不希望在你的文件,更復雜的方式將使用Tokenizer

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

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

,將返回所有的變量,甚至非全局的人,並且是在該腳本(!)

+0

是的,只是爲了調試目的。不是核心實施的一部分。 – DhruvPathak 2011-02-08 14:21:58