PHP использует строку как оператор - PullRequest
9 голосов
/ 25 апреля 2011

Скажите, у меня есть строка, $char. $char == "*".

У меня также есть две переменные, $ a и $ b, которые равны «4» и «5» соответственно.

Как мне получить результат $a $char $b, ie 4 * 5 ?

Спасибо:)

Ответы [ 5 ]

15 голосов
/ 25 апреля 2011

Вы можете использовать eval() в соответствии с предложением @konforce, однако самый безопасный маршрут будет выглядеть примерно так:

$left = (int)$a;
$right = (int)$b;
$result = 0;
switch($char){

  case "*":
    $result = $left * $right;
    break;

 case "+";
   $result = $left + $right;
   break;
// etc

}
7 голосов
/ 25 апреля 2011

Самый безопасный метод - это конструкция переключателя:

function my_operator($a, $b, $char) {
    switch($char) {
        case '=': return $a = $b;
        case '*': return $a * $b;
        case '+': return $a + $b;
        etc...
    }
}
6 голосов
/ 25 апреля 2011

Самый простой, но самый опасный метод - использовать eval.

$c = eval("return $a $char $b;");
1 голос
/ 25 апреля 2011

Вы можете сделать с eval, однако я бы не советовал использовать eval.

Если есть оператор case, вы можете проверить, что оператор перед использованием

switch($char)
{
  case '*':
    $result= $a * $b;
    break;

  case '+':
    $result= $a + $b;
    break;
}
1 голос
/ 25 апреля 2011

взгляните на функцию eval () . вам нужно будет собрать правильную команду php и запустить внутри eval (), чтобы извлечь результат.

...