我收到了这个错误,但我找不到原因:
Parse error: syntax error, unexpected $end in C:\wamp\www\test.php(19) : eval()'d code on line 1
任何见解都将受到赞赏!
$table = '<table><tr><td>${Q*10}</td></tr></table>';
$symbols = array('Q' => 10);
preg_replace_callback('/\${(\w+)([*+-\/])(\d+)}/', function($matches) use ($symbols, $table) {
return repl($matches, $symbols, $table);
}, $table);
function repl($tokens, $symbols, $table)
{
$replace = array_shift($tokens);
$operand1 = $symbols[$tokens[0]];
$operator = $tokens[1];
$operand2 = $tokens[2];
$val = eval("$operand1 $operator $operand2");
// Fix: $val = eval("return $operand1 $operator $operand2;");
$table = str_replace($replace, $val, $table);
echo $table; // Should be 100
}
// EOF
答案 0 :(得分:3)
eval
需要包含语句或语句块,而不仅仅是表达式。
要实际获得结果并指定它,您需要:
$val = eval("return $operand1 $operator $operand2;");
正如@ggutenberg所说,至少要用分号来避免语法错误。但return
要做你想做的事。
$matches
列表将包含位置[0]
的完整字符串。捕获组从[1]
开始。您可能需要调整回调中的$tokens
作业。
答案 1 :(得分:1)
尝试在eval字符串的末尾添加分号。