变量作为表达式-高级计算器



让我们考虑以下代码:

/**
 * @param  string $exp  expression
 * @param  number $var1
 * @param  number $var2 
 * @return json
 */
  public function calculate($exp, $var1, $var2) {}

处理这个计算函数最快、最优雅的方法是什么?

我被限制在"开关"吗?或者有可能以某种方式实现吗

$var1 . $exp . $var2

哪一个结果是和而不是字符串?

对此做了大量的研究,这确实是一个微不足道的问题,但它让我思考了几个小时。

简单,使用以下逻辑;

<?php
function c($e, $a, $b) {
   $e = create_function("", "return (" . $a . $e . $b . ");" );
   return 0 +  $e();
}
echo c("+", 1, 2);

实时预览

create_function创建了一个匿名lambda样式的函数,该函数在运行时创建,不保存在内存中。它比switch具有更大的灵活性,因为您不必不断为运算符添加case语句,它执行内部eval(),因此您需要进行一些数据验证。

您可以使用eval(),这将是最简单的,然而,它也是一个非常危险的函数,因此如果要使用它,您必须执行一些验证,以确保只通过了正确的运算符,这将使它不值得使用。

我会坚持使用switch语句:

public function calculate($exp, $var1, $var2) {
    switch($char) {
        case '=': return $var1 = $var2;
        case '*': return $var1 * $var2;
        case '+': return $var1 + $var2;
        case '-': return $var1 - $var2;
    }
}

最新更新