* * * * * * * * * * * * * * * * * $
включено в имя пароля в вашем регулярном выражении, поэтому вы ищете переменные с именем $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
.