2010-12-09 49 views
0

我有這樣的事情使用eval()如何避免使用eval對變量的特定字符串,需要執行

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

當這些運營商是從變量或數據庫字段。

如何在不使用eval的情況下實現相同的結果?可能嗎?

這不是安全問題,因爲值/運算符不是用戶輸入的,但如果PHP手冊中的this comment是任何事情都可能會導致性能問題,那麼這可能是性能問題。另外,如果在某個時候我想嘗試Facebook的HipHop,我需要用其他東西替換eval的所有用途。

+0

您可能想要查看http://stackoverflow.com/questions/1015242 – 2010-12-09 09:04:53

回答

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

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

+1

更好地使用`switch`。 – Gumbo 2010-12-09 08:59:54

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)); 
相關問題