我有3个这样的变量: $ first = 2; $ second = 5; $ operation ='*';
如何以编程方式将此数学问题的解决方案分配给$ answer变量? 我尝试过eval(),但这不起作用。
答案 0 :(得分:7)
eval()应该可以很好地完成这样的事情。请记住,eval()会返回NULL,除非你告诉它返回一些东西。
<?php
$first = 3;
$second = 4;
$operation = "*";
$answer = eval('return '.$first.$operation.$second.';');
echo $answer;
?>
答案 1 :(得分:5)
function add($a, $b) {
return $a + $b;
}
function multiply($a, $b) {
return $a * $b;
}
function divide($a, $b) {
return $a / $b;
}
$operations = array(
'+' => 'add',
'*' => 'multiply',
'/' => 'divide',
);
$a = 2;
$b = 5;
$operation = '*';
echo $operations[$operation]($a, $b);
答案 2 :(得分:1)
它适用于我:
var_dump(eval("return $first $operator $second;"));
但是eval
是邪恶的。你应该更好地使用这样的函数:
function foobar($operator)
{
$args = func_get_args();
array_shift($args);
switch ($operator) {
case "*":
if (count($args) < 1) {
return false;
}
$result = array_shift($args) * array_shift($args);
break;
/*
…
*/
}
if (count($args)) {
return call_user_func_array(__FUNCTION__, array_merge(array($operator, $result), $args));
}
return $result;
}
var_dump(foobar("*", 3, 5, 7));
答案 3 :(得分:1)
如果您打算经常进行此计算,我强烈建议您不要使用eval方法,而是使用上面发布的Ionut G. Stan方法。我知道它更复杂,但每次运行eval时,PHP都会重新加载编译器引擎,因此开销成本很高。如果你使用函数调度方法Ionut显示,你将获得一个主要的性能提升(大约10倍)。看看PHP手册中有关eval函数的注释,你会看到其他人也这样说过:http://www.php.net/eval
我曾经使用eval希望它能让我为Web应用程序构建一个快速模板机制,但是对eval的调用非常慢,当我意识到eval导致它时,我转向了另一种方法。速度提升非常惊人。