$first=5;
$second=5;
$operator="+";
$result=$first.$operator.$second;
echo $result;
但$ result只打印5 + 5。我希望它能够执行操作。
我的想法是将所有操作置于if条件下 - > if($ operator =='+'){添加第一个和第二个操作数}。还有其他想法吗?
答案 0 :(得分:8)
您可以尝试使用内置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';
}
}
答案 1 :(得分:1)
您必须使用执行PHP操作的eval()
。
$first=5;
$second=5;
$operator="+";
$term = $first.$operator.$second;
eval("$result = " . $term);
echo $result;
但要小心eval它会执行每个PHP函数。 (即使是执行..)
答案 2 :(得分:0)
Eval是一种解决方案,但还有其他解决方案。如果你搜索SO的数学解析器,你会发现很多答案。 This one就是一个很好的例子。
所以基本上,你的选择是:eval()
首先进行一些验证,或者是为你做的自定义数学解析器,例如evalMath。
如果您只查找简单操作(+, - ,*,/)和两个运算符,请使用参数的验证函数(仅限数字,仅限已知运算符)并使用eval。如果您希望能够解析复杂的操作(括号,变量......),那么请使用解析器。
答案 3 :(得分:-8)
当您使用
时,您的语法并不遥远$first.$operator.$second;
您实际上是将字符串添加到一起,您需要使用'+'运算符来成功使用您的方法。见下面的代码,经过试用和测试
$first = 5;
$second = 5;
$operator = '+';
$result = $first+$operator+$second;
echo $result;
?>