PHP:如何在每次使用包含eval()的函数之前重置全局变量



我在一个网站上有以下代码。

$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引用,因为不同语言会有不同版本的该变量。CCD_ 2被传递到函数中,并在变量中使用CCD_。然而,当函数被多次调用时,$magic_number与发送给函数的第一个值相比没有变化。例如,如果这样调用:

show_magic_number(5);
show_magic_number(2000);

输出如下:

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

我希望它是这样的:

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

很明显,我误解了globaleval()的工作原理,并尝试寻找答案和进行实验,但我只是太笨了,无法找到解决方案。我认为可能有某种方法可以每次重置全局变量,这样它就不会继续引用第一次发送给函数的$magic_number(即5)。

有人能提出解决办法吗?

试试这个。它至少可以摆脱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);
}

不要使用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);
}

相关内容

  • 没有找到相关文章