Скажем, у меня есть строка, $char. $char == "*".
У меня также есть две переменные, $a и $b, которые равны «4» и «5» соответственно.
Как мне получить результат $a $char $b, ie 4 * 5 ?
Спасибо :)
Скажем, у меня есть строка, $char. $char == "*".
У меня также есть две переменные, $a и $b, которые равны «4» и «5» соответственно.
Как мне получить результат $a $char $b, ie 4 * 5 ?
Спасибо :)
Вы можете использовать eval()
, как предложил @konforce, однако самым безопасным маршрутом будет что-то вроде:
$left = (int)$a;
$right = (int)$b;
$result = 0;
switch($char){
case "*":
$result = $left * $right;
break;
case "+";
$result = $left + $right;
break;
// etc
}
Самый безопасный метод - это конструкция switch:
function my_operator($a, $b, $char) {
switch($char) {
case '=': return $a = $b;
case '*': return $a * $b;
case '+': return $a + $b;
etc...
}
}
=
, ваш код выдаст sum
операндов. Разве не должно быть break
?
- person Shakti Singh; 25.04.2011
break
, когда есть return
- person Svish; 01.07.2012
Самый простой, но самый опасный метод — использовать eval
.
$c = eval("return $a $char $b;");
eval
или нет. Если вы проверяете, что $a
и $b
являются правильными числами и что $char
является правильной операцией, то eval
будет безопасным. Тем не менее, я бы все равно не использовал eval
на общедоступном сайте.
- person Matthew; 25.04.2011
eval
.
- person fingerman; 25.04.2011
взгляните на функцию eval(). вам нужно будет создать правильную команду php и запустить внутри eval(), чтобы извлечь результат.
Вы можете использовать eval
, однако я бы не советовал использовать eval
.
Если есть случай, когда оператор может чем угодно, вы должны проверить, какой оператор перед использованием
switch($char)
{
case '*':
$result= $a * $b;
break;
case '+':
$result= $a + $b;
break;
}