我在一个网站上有以下代码。
$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
很明显,我误解了global
和eval()
的工作原理,并尝试寻找答案和进行实验,但我只是太笨了,无法找到解决方案。我认为可能有某种方法可以每次重置全局变量,这样它就不会继续引用第一次发送给函数的$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);
}