1

我收到此错误,但我无法找出原因:

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
4

2 回答 2

3

eval需要包含一个语句或语句块,而不仅仅是一个表达式。

要实际获得结果并分配它,您需要:

    $val = eval("return $operand1 $operator $operand2;");

正如@ggutenberg 所说,至少分号可以避免语法错误。但是return做你打算做的事情。

$matches列表将包含位置的完整字符串[0]。捕获组从 开始[1]。您可能需要调整$tokens回调中的分配。

于 2013-03-04T17:38:20.900 回答
1

尝试在 eval 字符串的末尾添加分号。

于 2013-03-04T17:35:03.407 回答