Как перечислить все переменные PHP в файле? - PullRequest
1 голос
/ 16 января 2012

У меня есть файл PHP с переменными PHP внутри.Пример:

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

Я бы хотел перечислить из внешнего файла все переменные PHP в этом файле.Что-то, что вернулось бы:

Array(
   'username'
);

Я знаю, что есть PHP-функция с именем get_defined_vars, но это внешний файл.Есть ли способ получить все переменные PHP из внешнего файла?

Спасибо

Ответы [ 3 ]

6 голосов
/ 16 января 2012

Используйте 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]);
5 голосов
/ 16 января 2012

В зависимости от ожидаемой точности, бит token_get_all() traversal выдаст вам список переменных базовых имен:

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

Просто отфильтруйте [1] из этой структуры массива.

Немного менее устойчивым, но иногда все еще уместным является базовое регулярное выражение, которое также позволяет легче извлекать переменную массива или синтаксис объекта.

0 голосов
/ 23 октября 2017
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]);

// --------------
...