Проблема доступа к глобальным PHP при использовании переменной переменной - PullRequest
2 голосов
/ 21 февраля 2011

У меня есть эта строка в функции класса:

$this_value = eval("return $$existing_value;");

Это дает мне необходимое мне значение, когда в функции установлена ​​переменная $$existing_value, но я обнаружил, что мне действительно нужнополучить доступ к глобальной области в 99% случаев.Я попытался переписать его как $this_value = eval("return global $$existing_value;");, но это возвращает ошибку php.

Кто-нибудь знает, как я могу сделать это правильно?(кстати, я знаю о бедной практике, которую это представляет - но учитывая ситуацию, я не могу придумать никаких других подходов)

Ответы [ 4 ]

2 голосов
/ 21 февраля 2011

Попробуйте

$this_value = eval('global $existing_value; return $$existing_value;');

или

$this_value = eval('global $$existing_value; return $$existing_value;');

1 голос
/ 21 февраля 2011
$x = 3;

function sss()
{
    $x = 1;
    $y = eval('global $x; return $x;');
    var_dump($y);
}
sss();

Будет выводить int(3), так что это работает, но будьте осторожны с двойными кавычками и простыми кавычками!

0 голосов
/ 21 февраля 2011

Я переосмыслил этот процесс. Я понял, что могу добавить новый массив с фиксированным именем, который различные процессы, участвующие в этой функции, могут добавлять необходимые значения программно, а не пытаться угадать имена.

Это также будет намного более безопасным и надежным, чем переменные переменные.

0 голосов
/ 21 февраля 2011

Поскольку eval возвращает нужное вам значение, вы должны быть готовы связать возвращаемое значение с суперглобалами $_GLOBAL или $_SESSION (предпочтительно, потому что $_GLOBAL - зло).

$foo['bar'] = "pie";
$fixed_name_variable = "foo['bar']";
$_GLOBAL['foo'] =  eval("return $$fixed_name_variable;");
echo $_GLOBAL['foo']; // pie
...