我在google上搜索了这个功能很多。但是,我无法清楚地理解这个功能。 我有一个例子:
<?php
//eval dangerous to use
$motto="lksdfasdkf";
$str= "<h1>Welcome</h1><?php echo $motto;?><br/>";
echo $str.'<br />'; //result: welcome
eval("?>"." $str"."<?php echo $motto;"); //error
echo $str;
?>
答案 0 :(得分:1)
eval()
接受一个字符串并将其评估为PHP代码。以下是一些需要注意的要点:
eval()
将 PHP代码作为其参数 - 不是混合HTML标记。目前,您正在传递包含HTML标记的字符串。
您无需在字符串中添加<?php ... ?>
标记。 eval()
已经知道参数将是PHP代码(它应该是),所以你不需要告诉它
这是一个非常简短的例子:
$motto = "lksdfasdkf";
$str = 'echo $motto;';
eval($str); // => lksdfasdkf
此处,字符串$str
包含文字字符串echo $motto;
,它是PHP中的有效语句。当您调用eval($str);
时,字符串将被评估为PHP代码。在这种情况下,它将回显变量的内容。
请注意,如果您使用双引号,则无效:
$motto = "lksdfasdkf";
$str = "echo $motto;";
eval($str);
如果您启用了错误报告,则会收到以下错误:
注意:使用未定义的常量lksdfasdkf - 假设'lksdfasdkf'在
中
原因是当变量用单引号括起来时,变量不解析。当您使用双引号来定义变量时,变量值会被内插到结果字符串中,这意味着$str
将包含文字字符串echo lksdfasdkf;
- 这是无效的PHP代码。解决方案是逃避美元字符以避免将其解释为变量:
$motto = "lksdfasdkf";
$str = "echo \$motto;";
eval($str); // => lksdfasdkf
答案 1 :(得分:0)
eval - 将字符串评估为PHP代码 - 您的代码也正常工作
试
$motto="lksdfasdkf";
$str= "<h1>Welcome</h1>$motto<br/>";
echo $str.'<br />'; //result: welcome
eval("\$str = \"$motto\";");
echo $str;