我试图通过检查变量来避免重复我的代码,如果它是某个运算符。运算符(操作数?)作为参数
基本上..
$op = $_POST['operator'];
$x = 5;
$y = 2;
$result = $x /* $op instead of '+'/'-'/'*'/'/'/'%' */ $y;
这是可能的,或者我会送运营商作为一个字符串和重复每个运营类型的代码?
我试图通过检查变量来避免重复我的代码,如果它是某个运算符。运算符(操作数?)作为参数
基本上..
$op = $_POST['operator'];
$x = 5;
$y = 2;
$result = $x /* $op instead of '+'/'-'/'*'/'/'/'%' */ $y;
这是可能的,或者我会送运营商作为一个字符串和重复每个运营类型的代码?
这是一个很大安全做这样的事情:
$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';
}
类似的规定。
Ahem。你可以eval
。
$result = eval("$x $op $y");
但这危险,你应该非常小心净化你的变量。有一种说法就像“如果你的问题需要使用eval
,那么问题就是错误的。”类似的东西。这几乎当然是更好的做这样的事情:
function apply_op($x, $y, $op) {
switch ($op) {
case '+': return $x + $y;
...
}
}
所有参数将被适当处理。谢谢! :) –
而eval往往表明你做错了某件事 - 它的重量远远超过危险 - 即使是在大写字母和粗体字中) – hakre
@hakre:我通常会说“危险的”比“错误的”更糟糕, 。 –
可以让这个:
$operators = array("+", "-","*","%","/");
$op = $_POST["operator"];
if(in_array($op, $operators)) {
echo eval("$x $op $y");
} else {
echo "Operator not supported";
}
在这种情况下是相当危险的,因为$ op是用户输入。用户可以输入任何内容,包括执行一些危险的PHP代码。 – Sufendy
相当长,但仍然比'eval()更好'使用eval的恕我直言 – Sufendy