让我们考虑以下代码:
/**
* @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;
}
}