如何使用保存在变量中的运算符符号执行操作[重复]

Posted

技术标签:

【中文标题】如何使用保存在变量中的运算符符号执行操作[重复]【英文标题】:how to perform operations with operator symbol saved in a variable [duplicate] 【发布时间】:2013-03-04 05:58:11 【问题描述】:

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

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

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

echo $result;

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

我的想法是将所有操作放在一个 if 条件中 -> if($operator == '+')添加第一个和第二个操作数。大家还有什么想法吗?

【问题讨论】:

你必须使用eval()。这通常表明你应该做一些不同的事情。我建议审查您的策略。 您能详细说明一下吗?以及为什么您不发布答案?呵呵 【参考方案1】:

您可以尝试使用带有switch() 的自定义函数,而不是使用eval()

$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 检查数值。不错且简单的答案,具有更高的安全性。【参考方案2】:

你必须使用eval()来执行php操作。

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

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

echo $result;

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

【讨论】:

为了额外的安全性,您可以检查 $first 和 $second are integer 并检查 $operator 是否是有效的运算符 if(in_array($operator, array('+', '-', '*', '/', '%'))) 然后执行 eval 函数【参考方案3】:

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

因此,基本上,您的选择是:eval() 首先进行一些验证,或者为您执行此操作的自定义数学解析器,例如 evalMath。

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

【讨论】:

【参考方案4】:

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

$first.$operator.$second;

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

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

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

    echo $result;

?>

【讨论】:

您在这里所做的只是像往常一样添加两个变量。让我解释一下:$result = $first+$operator+$second; PHP 检查 $first 的值是 5,然后 PHP 检查 $operator 的值,但是哎呀它是一个字符串,所以 PHP 将它转换为一个数字 0 echo intval('+');,然后 PHP检查 $second 是否为 5,因此等式变为 5+0+5 = 10。例如,如果您执行 $operator = '*';,它将始终返回 10。

以上是关于如何使用保存在变量中的运算符符号执行操作[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB的符号运算变量如何创建?

C#8.0和.NET Core3.0笔记控制流程和转换类型

Android 如何实现Button 重复点击实现两种功能,例如播放按钮 点击一次停止,再点击一次播放

(急)c#中的换列符号是啥

Java常用运算符号

Java中的基本运算符