【问题标题】:How to list all PHP variables in a file?如何列出文件中的所有 PHP 变量?
【发布时间】:2012-01-15 20:26:43
【问题描述】:

我有一个 PHP 文件,里面有 PHP 变量。
示例:

Hi <?=$username?>,
Can you please send me an email ?

我想从外部文件中列出该文件中的每个 PHP 变量。
会返回的东西:

Array(
   'username'
);

我知道有一个名为 get_defined_vars 的 PHP 函数,但这是一个外部文件。
有没有办法从外部文件中获取所有 PHP 变量?

谢谢

【问题讨论】:

  • 我会推荐一个不错的 PHP IDE,所有优秀的都这样做。

标签: php function templates variables


【解决方案1】:

使用file_get_contents()preg_match_all()

$file = file_get_contents('file.php'); 
preg_match_all('/\$[A-Za-z0-9-_]+/', $file, $vars);

print_r($vars[0]);

【讨论】:

  • 非常好,谢谢。这也在页面中显示了美元金额,例如 $87,我转义了整数,现在可以了。
  • 当您在代码中有诸如$this-&gt;myMethod() 之类的内容时,上面的正则表达式将$this- 确定为变量。我认为从正则表达式中取出最后一个连字符来修复?另请参阅我的答案中的函数,该函数允许您控制是否包含 cmets 中包含的变量。谢谢
【解决方案2】:

根据预期的准确度,token_get_all() 遍历将为您提供变量基名列表:

print_r(
    array_filter(
        token_get_all($php_file_content),
        function($t) { return $t[0] == T_VARIABLE; }
    )
);

只需从该数组结构中过滤掉 [1]

弹性稍差,但有时仍然合适的是基本的正则表达式,它还允许更轻松地提取数组变量或对象语法。

【讨论】:

    【解决方案3】:
    function extract_variables($content, $include_comments = false)
    {
        $variables = [];
    
        if($include_comments)
        {
            preg_match_all('/\$[A-Za-z0-9_]+/', $content, $variables_);
    
            foreach($variables_[0] as $variable_)
                if(!in_array($variable_, $variables))
                    $variables[] = $variable_;
        }
        else
        {
            $variables_ = array_filter
            (
                token_get_all($content),
                function($t) { return $t[0] == T_VARIABLE; }
            );
    
            foreach($variables_ as $variable_)
                if(!in_array($variable_[1], $variables))
                    $variables[] = $variable_[1];
        }
    
        unset($variables_);
        return $variables;
    }
    
    // --------------
    
    $content = file_get_contents("file.php");
    $variables = extract_variables($content);
    
    print_r($vars[0]);
    
    // --------------
    

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 1970-01-01
      • 2016-02-02
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2011-07-13
      • 2017-06-24
      • 2016-01-18
      相关资源
      最近更新 更多