Операторы (операнды?) Как параметры - PullRequest
0 голосов
/ 16 июля 2011

Я пытаюсь избежать дублирования моего кода, проверяя переменную, если это определенный оператор.

В основном ..

$op = $_POST['operator'];
$x = 5;
$y = 2;
$result = $x /* $op instead of '+'/'-'/'*'/'/'/'%' */ $y;

Возможно ли это, или мне придется отправитьоператор в виде строки и дублировать код для каждого типа оператора?

Ответы [ 3 ]

2 голосов
/ 16 июля 2011

Гораздо безопаснее сделать что-то вроде этого:

$x = 5;
$y = 2;

switch($_POST['operator']){
    case '+':
        $result = $x + $y;
        break;
    case '-':
        $result = $x - $y;
        break;
    case '*':
        $result = $x*$y;
        break;
    case '/':
        $result = $x/$y;
        break;
    case '%':
        $result = $x % $y;
        break;
     default:
        $result = 'Operator not supported';
}

Что-то в этом роде.

1 голос
/ 16 июля 2011

гм. Вы можете eval.

$result = eval("$x $op $y");

Но это ОПАСНО , и вам следует тщательно очистить переменные. Есть поговорка, которая звучит примерно так: «Если ваша проблема требует использования eval, значит, проблема неправильная». Что-то вроде того. Почти наверняка предпочтительнее сделать что-то вроде этого:

function apply_op($x, $y, $op) {
    switch ($op) {
    case '+': return $x + $y;
    ...
    }
}
0 голосов
/ 16 июля 2011

Вы можете сделать это:

$operators = array("+", "-","*","%","/"); 
$op = $_POST["operator"]; 
if(in_array($op, $operators)) {
    echo eval("$x $op $y");
} else {
    echo "Operator not supported";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...