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 文件中设置,然后在函数内使用 global 引用,因为对于不同的语言会有不同版本的该变量。$magic_number被传递给函数,并在变量中使用eval(). 但是,当函数被多次调用时,$magic_number发送给函数的第一个值不会改变。例如,如果这样调用:

show_magic_number(5);
show_magic_number(2000);

...输出是这样的:

幻数是:5
幻数是:5

...当我希望它是这样的时候:

幻数是:5
神奇的数字是:2000

显然,我误解了如何globaleval()工作,并尝试寻找答案和实验,但我实在是太菜鸟了,无法找出解决方案。我认为可能有某种方法可以每次都重置全局变量,这样它就不会继续引用第一次发送给函数的$magic_number(ie )。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

不使用eval,看一下sprintf函数:

$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 回答