我试图通过检查变量是否为某个运算符来避免重复代码。
基本上..。
$op = $_POST['operator'];
$x = 5;
$y = 2;
$result = $x /* $op instead of '+'/'-'/'*'/'/'/'%' */ $y;这是可能的吗?还是我必须将操作符作为字符串发送,并按操作符类型复制代码?
发布于 2011-07-16 10:05:10
这样做要安全得多:
$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';
}一些类似的东西。
发布于 2011-07-16 09:59:11
啊哈。你可以使用eval。
$result = eval("$x $op $y");但这是危险的,你应该非常小心地清理你的变量。有一种说法类似于“如果你的问题需要使用eval,那么这个问题就是错误的”。差不多吧。几乎可以肯定的是,这样做更可取:
function apply_op($x, $y, $op) {
switch ($op) {
case '+': return $x + $y;
...
}
}发布于 2011-07-16 10:38:34
你可以这样做:
$operators = array("+", "-","*","%","/");
$op = $_POST["operator"];
if(in_array($op, $operators)) {
echo eval("$x $op $y");
} else {
echo "Operator not supported";
}https://stackoverflow.com/questions/6714771
复制相似问题