Как избежать использования eval для определенной строки переменных, которые должны быть выполнены - PullRequest
0 голосов
/ 09 декабря 2010

У меня есть такие вещи, используя eval():

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

Где оператор из переменной или поля базы данных.

Как мне добиться того же результата без использования eval? Является ли это возможным?

Это не проблема безопасности, поскольку значения / оператор не вводятся пользователем, но это может быть проблемой производительности, если этот комментарий в руководстве по PHP является чем-то подходящим. Кроме того, если в какой-то момент я захочу попробовать хип-хоп Facebook, мне нужно заменить все варианты использования eval чем-то другим.

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010
if(strcmp($operator, "+") == 0) {  
  return   $value1 + $value2;
}  
else if(strcmp($operator, "*") == 0) {  
return   $value1 * $value2;  
}  
...  

Как уже упоминалось @Gumbo, вы также можете использовать switch()

1 голос
/ 09 декабря 2010

Ну, я не уверен насчет операторов, но вы можете сделать что-то подобное с именами функций:

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));
...