Динамически загружать переменные, которые содержат переменные, которые содержат значения из файла в php - PullRequest
0 голосов
/ 11 апреля 2020

Перед кодом я убедился, что программа включила (_once) все файлы, которые содержат эти переменные с разными значениями. Код:

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

    echo '<table>';
    foreach ($vars[0] as $var) {
        echo '<tr><td>';
        //print_r($var);
        echo "${$var}";
        echo '</tr></td>';
    }
    echo '</table>';

В этом случае у меня есть ошибки вывода - Примечание: неопределенная переменная: '$ password' ... -. Если я поменяю

echo "${$var}";

на

echo "$var";

, его вывод будет "$ password". Но я хочу увидеть ЗНАЧЕНИЕ этой переменной ($ password), что такое: «Пароль». И у меня есть 194 переменные, которые содержат значения во многих файлах.

1 Ответ

0 голосов
/ 11 апреля 2020

* * * * * * * * * * * * * * * * * $ включено в имя пароля в вашем регулярном выражении, поэтому вы ищете переменные с именем $password, а не password, как вы ожидаете.

Различие может быть трудно увидеть - обычно $password относится к переменной с именем password - это то, что вы ожидаете. В вашем примере вы хотите, чтобы результат был ${"password"} - но вы также включаете $ из вашего регулярного выражения, эффективно пытаясь найти переменную с именем $password - с присутствующим знаком доллара (а не переменная с именем password, как и следовало ожидать).

Вы можете изменить свое регулярное выражение, добавив подгруппу захвата, чтобы пропустить $:

preg_match_all('/\$([A-Za-z0-9-_]+)/', $mainFile, $vars);

.. и затем используйте foreach ($vars[1] as $var).

Другой вариант - использовать ltrim для удаления префикса $:

$var = ltrim($var, '$');

.. внутри вашего foreach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...