使用$ var = eval(“2 + 2”)不会像PHP中预期的那样进行评估?

时间:2012-08-09 00:37:11

标签: php eval

我使用eval命令尝试了许多不同的代码组合。但是我的答案总是空白。这是我试过的一个简单的。

$equation = "18 - (18 * 2) - 1";
$var = eval($equation);
echo "answer: " . $var;

我知道这不需要eval代码,但我正在处理的真实代码。它总是显示空白。

2 个答案:

答案 0 :(得分:3)

当您将变量传递给eval()以使其成为有效且完整的PHP表达式时,您需要在等式中设置变量:

$equation = "18 - (18 * 2) - 1";
eval(  '$var = ' . $equation . ';');
echo "answer: " . $var;

或者,您可以返回值:

$var = eval(  'return ' . $equation . ';');

现在您可以执行echo $var;,如this demo中所示。

话虽这么说,eval()使用通常是不鼓励的,因为潜在的问题通常是通过其他方式解决的。

答案 1 :(得分:3)

解决方案

在评估语句中添加return,否则eval()将不知道要返回的内容:

$equation = '2 + 2 * 2';
$var = eval("return $equation;");

证明,上述情况有效:http://ideone.com/bTtIH

关于return与设定变量

的优越性

来自the documentation of eval()的更多内容:

  

eval()返回NULL,除非在评估的代码中调用return,在这种情况下,返回传递给return的值。

换句话说:没有必要污染命名空间,你可以直接从eval()返回的内容得到你想要的东西。