使用 $var = eval(“2 + 2”) 在 PHP 中不会按预期求值


Using $var = eval("2 + 2") does not evaluate as expected in PHP?

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

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

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

解决方案

在计算语句中添加return,否则eval()将不知道要返回什么:

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

证明上述工作:http://ideone.com/bTtIH

关于return与设置变量的优越性

更多来自eval()文档:

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

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

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

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

或者,您可以返回以下值:

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

现在您可以执行echo $var;,如本演示所示。

话虽如此,通常不鼓励使用eval(),因为根本问题通常通过其他方法解决。