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

时间:2014-09-05 15:40:23

标签: php

让我们考虑以下代码:

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

处理此计算功能的最快捷,最优雅的方法是什么?

我是否仅限于'开关'?或者是否有可能以某种方式实现

$var1 . $exp . $var2

哪个会导致总和而不是字符串?

对此进行了一些繁重的研究,这真是微不足道的问题,但它让我思考了几个小时。

2 个答案:

答案 0 :(得分:2)

简单,使用以下逻辑;

<?php

function c($e, $a, $b) {
   $e = create_function("", "return (" . $a . $e . $b . ");" );
   return 0 +  $e();
}

echo c("+", 1, 2);

Live Preview

create_function创建一个anonymous lambda - 样式的函数,该函数在运行时创建,而不是保存在内存中。它允许比switch更灵活,因为您不必为运营商添加case语句,它会执行内部eval(),因此你需要做一些数据验证。

答案 1 :(得分:0)

你可以使用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;
    }
}