我在字符串敌人的例子中得到公式
$a = '1*2*(2+3)';
echo eval($a) // Output should be 10
现在我正在尝试评估此字符串并使用eval,但在php 7中给我这个错误不鼓励使用eval(),所以我该如何评估这个字符串。
答案 0 :(得分:6)
PHP never raises any such error:您应该怀疑第三方是否干扰了安装,可能安装了某种以“安全”为重点的扩展来改变PHP的行为。
所有这些扩展都不受PHP项目的批准,并且非常糟糕。
尽管手册中有关于eval的内容,但在包含文件和评估某些代码之间存在no technical difference。
现实世界中唯一的区别是eval'd代码可能包含用户输入:对于不使用eval的PHP应用程序,用户输入的清理和过滤是一个问题。
注意:您错过了评估表达式的返回
答案 1 :(得分:0)
manual说;
<强>注意强>
eval()语言结构非常危险,因为它允许 执行任意PHP代码。因此不鼓励使用它。如果你 仔细确认除了使用它之外别无选择 构建时,要特别注意不要传递任何用户提供的数据 没有事先正确验证它就进入它。
就替代方案而言,您可以尝试在线程中给出的解决方案:calculate math expression from a string using eval
答案 2 :(得分:0)
除非您在评估的代码中使用echo
,否则无法在eval()
上使用return
。
eval()
返回NULL
,除非在评估代码中调用return
请参阅:http://php.net/manual/en/function.eval.php
所以你可以这样做:
$a = 'echo 1*2*(2+3);';
eval($a);
或
$a = 'return 1*2*(2+3);';
echo eval($a);