虽然我不建议对此使用eval(这不是解决方案),但问题是eval需要完整的代码行,而不仅仅是片段.
$ma ="2+10";
$p = eval('return '.$ma.';');
print $p;
应该做你想要的
一个更好的解决方案是为你的数学表达式写一个tokenizer / parser.这是一个非常简单的基于正则表达式的例子,给你一个例子:
$ma = "2+10";
if(preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE){
$operator = $matches[2];
switch($operator){
case '+':
$p = $matches[1] + $matches[3];
break;
case '-':
$p = $matches[1] - $matches[3];
break;
case '*':
$p = $matches[1] * $matches[3];
break;
case '/':
$p = $matches[1] / $matches[3];
break;
}
echo $p;
}