как выполнять операции с символом оператора, сохраненным в переменной

ребята, это простой вопрос для большинства из вас, вероятно. но я смущен тем, как я могу выполнять операции с символом оператора, сохраненным в переменной. Пример.

$first=5; $second=5; $operator="+"; $result=$first.$operator.$second; echo $result; 

но $ result будет просто печатать 5 + 5. Я хочу, чтобы он выполнил операцию.

моя идея состоит в том, чтобы поместить все операции в условие if -> if ($ operator == '+') {добавить первый и второй операнды}. любые другие идеи?

Вы не за горами со своим синтаксисом, когда используете

 $first.$operator.$second; 

Вы буквально добавляете строки вместе, вам нужно использовать оператор «+» для успешного использования вашего метода. См. Ниже код, проверенный и проверенный

  $first = 5; $second = 5; $operator = '+'; $result = $first+$operator+$second; echo $result; ?> 

Вместо использования eval() вы можете попробовать пользовательскую функцию с помощью switch() внутри:

 $first = 5; $second = 3; $operator = '+'; $result = mathOp($operator, $first, $second); echo $result; function mathOp($operator, $n1, $n2){ if(!is_numeric($n1) || !is_numeric($n2)){ return 'Error: You must use numbers'; } switch($operator){ case '+': return($n1 + $n2); case '-': return($n1 - $n2); case '*': return($n1 * $n2); case '/': if($n2 == 0){ return 'Error: Division by zero'; }else{ return($n1 / $n2); } default: return 'Unknown Operator detected'; } } 

Вы должны использовать eval() который выполняет операцию PHP.

 $first=5; $second=5; $operator="+"; $term = $first.$operator.$second; eval("$result = " . $term); echo $result; 

Но будьте осторожны с eval, он выполняет каждую функцию PHP. (Даже exec ..)

Eval – одно из решений, но есть и другие. Если ваш поиск SO для математического анализатора, вы найдете много ответов. Это хороший пример.

Итак, в основном, ваши варианты: eval() с некоторой проверкой сначала или пользовательский математический парсер, который делает это для вас, например evalMath .

Если вы ищете только простые операции (+, -, *, /) и два оператора, используйте функцию проверки для ваших параметров (только числа, только известные операторы) и используйте eval. Если вы хотите иметь возможность анализировать сложные операции (скобки, переменные …), то переходите к парсеру.