【发布时间】:2012-07-29 07:38:20
【问题描述】:
我在网站中有以下代码。
$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
很明显,我误解了global 和eval() 的工作原理,并尝试寻找答案并进行试验,但我实在是太菜鸟了,无法找到解决方案。我认为可能有某种方法可以每次都重置全局变量,这样它就不会继续引用第一次发送给函数的$magic_number(即5)。
任何人都可以提出解决这个问题的方法吗?
【问题讨论】:
-
你为什么要这样做?为什么不直接在函数内部设置 $magic_number_output?
-
正如解释的那样,变量 $magic_number_output 被设置在一个单独的 PHP 文件中,因为对于不同的语言会有不同的版本。每种语言使用一个文件来包含整个网站使用的字符串。
-
顺便说一句,你真的应该考虑不要使用
eval(),因为它非常糟糕和邪恶。在你的情况下,它似乎过于复杂...... -
你能推荐一个替代方案吗?我承认当用户输入通过时 eval() 是不安全的,但在这种情况下,只有我自己的代码设置的值才会传递给它。
-
魔法?全球的?评估?我走了!
标签: php function global-variables eval global