以下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";
?>
答案 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;。