eval() лучше не использовать из соображений безопасности. Вы получите гораздо больший контроль над ситуацией, в частности в обработке ошибок, если обработаете возможные варианты по отдельности. Бинарных операций не так много
| Код |
function calculate($op1, $op2, $operation) { if (!is_numeric($op1) || !is_numeric($op2)) { throw new Exception('Invalid operands'); } switch ($operation) { case '+': return $op1 + $op2; case '-': return $op1 - $op2; case '*': return $op1 * $op2; case '/': if ($op2 == 0) { throw new Exception('divide by zero error'); } else { return $op1 / $op2; } case '^': if ($op1 == 0 && $op2 <= 0 || !is_int($op2)) { throw new Exception('Invalid operands'); } else { return pow($op1, $op2); } default: throw new Exception('Invalid operation'); } }
|
Я не хотела сейчас возиться со случаями попыток вычисления корня четной степени из отрицательных чисел и ограничила степень целыми числами. Можете обработать эту ситуацию подробнее, если задача требует |