eval函数访问数组中的解析错误

时间:2016-02-21 00:06:46

标签: php

以下php代码在第二个eval()函数调用上生成PHP Parse错误:

  

解析错误,期待"identifier (T_STRING)"' or"变量   (T_VARIABLE)"'或'"号码(T_NUM_STRING)"'在   demo.php(19):第1行的eval()&#39代码

似乎php无法处理要评估的代码中的数组引用$ keys [' key1']。我已经尝试了5.5.30和7.0.3版本,但结果相似。这是php中的错误,还是我做错了什么?有没有已知的解决方法?

由于我确信某些用户会告诉我eval是邪恶的并且我不应该使用它,我想要做的是使用基于一组键的预定值填充模板表单。我可以编写自己的php代码来做到这一点,但它比简单地调用eval要复杂得多。

<?php
    $keys = array (
        'Key1' => 'Successful',
    );

    $key1 = 'Key1';

    echo 'PHP Version: ' . phpversion () . "\n";

    $evaluated = 'Failure';
    $php_works = '$evaluated = "value=$keys[$key1]";';
    echo "Evaluating the following works: " . $php_works . "\n";
    eval ($php_works); 
    echo $evaluated . "\n";

    $evaluated = 'Failure';
    $php_broken = '$evaluated = "value=$keys[' . "'key1'" . ']";';
    echo "Evaluating the following does NOT work: " . $php_broken . "\n";
    eval ($php_broken); 
    echo $evaluated . "\n";
?>

1 个答案:

答案 0 :(得分:2)

在php中,这不起作用:

echo "$keys['Key1']";

您必须使用以下方式之一写作:

echo "{$keys['Key1']}";
echo "$keys[Key1]";

因此,您的$php_broken字符串必须以这种方式更改:

$php_broken = '$evaluated = "value={$keys[' . "'Key1'" . ']}";';

或以这种方式:

$php_broken = '$evaluated = "value=$keys[Key1]";';

编辑,如评论中所述,您还必须使用&#39; Key1&#39;而不是&#39; key1&#39;。