3

伙计们,这对你们大多数人来说可能是一个简单的问题。但我对如何使用保存在变量中的运算符符号执行操作感到困惑。例子。

$first=5;
$second=5;
$operator="+";

$result=$first.$operator.$second;

echo $result;

但 $result 只会打印 5+5。我希望它执行操作。

我的想法是将所有操作置于 if 条件中 -> if($operator == '+'){add the first and second operand}。还有其他想法吗?

4

4 回答 4

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';
    }
}
于 2013-03-15T13:53:47.247 回答
1

您必须使用eval()which 执行 PHP 操作。

$first=5;
$second=5;
$operator="+";

$term = $first.$operator.$second;
eval("$result = " . $term);

echo $result;

但要小心 eval 它执行每个 PHP 函数。(甚至执行..)

于 2013-03-15T13:53:25.133 回答
0

Eval 是一种解决方案,但还有其他解决方案。如果您搜索数学解析器,您会发现很多答案。是一个很好的例子。

所以基本上,您的选择是:eval()首先进行一些验证,或者为您完成它的自定义数学解析器,例如evalMath

如果您只寻找简单的操作(+、-、*、/)和两个运算符,请为您的参数使用验证函数(仅限数字,仅限已知运算符)并使用 eval。如果您希望能够解析复杂的操作(括号、变量...),请使用解析器。

于 2013-03-15T13:47:21.153 回答
-8

当您使用时,您离自己的语法不远了

$first.$operator.$second;

您实际上是将字符串添加在一起,您需要使用“+”运算符才能成功使用您的方法。请参阅下面的代码,经过尝试和测试

    $first = 5;
    $second = 5;
    $operator = '+';

    $result = $first+$operator+$second;

    echo $result;

?>
于 2013-03-15T14:33:37.220 回答