2

クラス関数に次の行があります。

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

これにより、変数が関数に設定されているときに必要な値が得られますが、$$existing_value実際には 99% のケースでグローバル スコープにアクセスする必要があることがわかりました。のように書き換えてみまし$this_value = eval("return global $$existing_value;");たが、php エラーが返されます。

これを正しく行う方法を知っている人はいますか? (ちなみに、私はこれが表す貧弱な慣行を認識していますが、状況を考えると、他のアプローチは考えられません)

4

4 に答える 4

2

試す

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

また

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

于 2011-02-21T12:27:23.777 に答える
1
$x = 3;

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

と出力int(3)されるので動作しますが、ダブルクォーテーションや単純クォーテーションに注意!

于 2011-02-21T12:30:52.060 に答える
0

evalは必要な値を返すので、戻り値を$_GLOBALまたは$_SESSION(悪であるために推奨される$_GLOBAL)スーパーグローバルに割り当てるだけです。

$foo['bar'] = "pie";
$fixed_name_variable = "foo['bar']";
$_GLOBAL['foo'] =  eval("return $$fixed_name_variable;");
echo $_GLOBAL['foo']; // pie
于 2011-02-21T12:41:44.527 に答える
0

私はこのプロセスを再考しました。名前を推測しようとするのではなく、この関数に貢献するさまざまなプロセスが必要な値をプログラムで追加できる、固定名の新しい配列を追加できることに気付きました。

また、可変変数よりもはるかに安全で信頼性が高くなります。

于 2011-02-21T13:16:41.047 に答える