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 に答える