如何避免对需要执行的特定变量字符串使用eval

时间:2010-12-09 08:52:35

标签: php eval

我使用eval()包含这样的内容:

$result = eval("return ".$value1.$operator.$value2.";");

运算符来自变量或db字段。

如果不使用eval,我将如何实现相同的结果?可能吗?

这不是一个安全问题,因为值/运算符不是用户输入的,但如果PHP手册中的this comment是任何事情,那么它可能是一个性能问题。另外,如果在某些时候我想尝试Facebook的HipHop,我需要用其他东西替换eval的所有用途。

2 个答案:

答案 0 :(得分:2)

if(strcmp($operator, "+") == 0) {  
  return   $value1 + $value2;
}  
else if(strcmp($operator, "*") == 0) {  
return   $value1 * $value2;  
}  
...  

正如@Gumbo所提到的,您也可以使用switch()

答案 1 :(得分:1)

好吧,我不确定运算符,但你可以用函数名做这样的事情:

function add($x, $y) {
    return $x + $y;
}

$value1 = 1;
$value2 = 2;
$func = "add";

$result = $func($value1, $value2);

您甚至可以使用内置函数执行此操作:

$func = 'array_sum';
$result = $func(array($value1, $value2));