2011-02-08 66 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