2

私はウェブサイトに次のコードを持っています。

$magic_number_output = 'The magic number is: $magic_number';

function show_magic_number($magic_number) {
  global $magic_number_output;

  eval("\$magic_number_output = \"$magic_number_output\";");

  echo '
  ' . $magic_number_output;

}

変数$magic_number_outputは別のPHPファイルに設定されており、言語ごとにこの変数のバージョンが異なるため、関数内でグローバルを使用して参照されます。$magic_numberは関数に渡され、これは変数で。を使用して置き換えられますeval()。ただし、関数が複数回呼び出された場合、は関数に$magic_number送信された最初の値から変更されません。たとえば、次のように呼び出された場合:

show_magic_number(5);
show_magic_number(2000);

...出力は次のようになります。

魔法の数は:5
魔法の数は:5

...これにしたいとき:

魔法の数は:5
魔法の数は:2000

明らかに、私はどのようglobaleval()機能するかを誤解し、答えを探して実験しようとしましたが、解決策を見つけるにはあまりにも多くの初心者です。毎回グローバル変数をリセットして、最初に関数に送信された$magic_number(つまり)を参照し続けないようにする方法があるのではないかと思いました。5

誰かがこれを回避する方法を提案できますか?

4

2 に答える 2

1

これを試して。それは少なくともeval()

$magic_number_output = 'The magic number is: $magic_number';

function show_magic_number($magic_number) {
  global $magic_number_output;

  $output=$magic_number_output;
  echo str_replace('$magic_number',$magic_number,$output);
}
于 2012-07-29T07:48:43.977 に答える
0

を使用しないでください。sprintf関数evalを見てください。

$magic_number_output = 'The magic number is: %d';

function show_magic_number($magic_number) {
  global $magic_number_output;
  echo sprintf($magic_number_output, $magic_number);
}
于 2012-07-29T07:52:00.173 に答える