使用变量

时间:2016-07-28 12:03:45

标签: php eval

我有3个变量和一个可信用户需要能够通过CMS定义的公式。该公式将随时间而变化,变量的值来自数据库。

我如何计算出计算的答案?我认为eval是相关的但不能完全发挥作用

$width = 10;
$height = 10;
$depth = 10;

$volumetric = '(W*H*D)/6000';

$volumetric = str_replace('W', $width, $volumetric);
$volumetric = str_replace('H', $height, $volumetric);
$volumetric = str_replace('D', $depth, $volumetric);

eval($volumetric);

这给了我:

Parse error: parse error in /path/to/vol.php(13) : eval()'d code on line 1

3 个答案:

答案 0 :(得分:1)

您需要非常小心eval,因为您可以让人们直接在服务器上运行命令。务必read the documentation彻底了解风险。

也就是说,您需要将结果分配给变量。你可以整理你正在做的事情,你只需要一个str_replace。试试这个:

$width = 10;
$height = 10;
$depth = 10;

$volumetric = '(W*H*D)/6000';
$volumetric = str_replace(['W', 'H', 'D'], [$width, $height, $depth], $volumetric);

eval("\$result = $volumetric;");
echo $result;

答案 1 :(得分:0)

Eval是正确的方法...我的正确代码是:

$width = 60;
$height = 60;
$depth = 60;

$volumetric = '(W*H*D)/6000';

$volumetric = str_replace('W', $width, $volumetric);
$volumetric = str_replace('H', $height, $volumetric);
$volumetric = str_replace('D', $depth, $volumetric);

eval('$result = '.$volumetric.';');

echo $result;

答案 2 :(得分:0)

你的出发点是对的。如果您不想使用或编写复杂的解析器,则eval是最佳选择。但是,eval将给定的字符串转换为PHP代码。所以,基本上你正在努力的是这样;

$width = 10;
$height = 10;
$depth = 10;

$volumetric = '(W*H*D)/6000';

$volumetric = str_replace('W', $width, $volumetric);
$volumetric = str_replace('H', $height, $volumetric);
$volumetric = str_replace('D', $depth, $volumetric);

(10*10*10)/600;

所以输出错误。您应该将此等式赋值给变量。正确的方法是;

eval('$result = ('.$volumetric.');');

eval("\$result = ({$volumetric});")

另外我想添加一些东西。使用eval时小心!