Php 请解释它的作用:eval(“\$str=\$str\”)
这段代码来自php.net的eval手册:Php 请解释它的作用:eval(“\$str=\$str\”),php,eval,Php,Eval,这段代码来自php.net的eval手册: <?php $string = 'cup'; $name = 'coffee'; $str = 'This is a $string with my $name in it.'; echo $str. "<br>"; eval("\$str = \"$str\";"); echo $str. "<br>"; ?> 不知何故,我无法理解这行代码的作用: eval(\$str=\“$str\”;”) 我猜
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "<br>";
eval("\$str = \"$str\";");
echo $str. "<br>";
?>
不知何故,我无法理解这行代码的作用:
eval(\$str=\“$str\”;”)
我猜净效应是这样的:$str=“$str”但是当我用这个代替eval代码时,我没有得到同样的效果。有人能带我看完这行代码吗。我知道该函数带来的漏洞。但我的兴趣仅限于理解这一行代码
我想我现在有了答案-
eval(“\$str=\“$str\”;”)
和$str=“$str”代码>不是一回事。在第二种情况下,$str被求值为,这是一个$string,其中有我的$name。
在第一种情况下,同样的字符串,因为它仍然在eval构造中,被进一步求值,结果是这是一杯咖啡。
它将字符串求值为PHP。
请注意,第一个字符串没有打印$string&$name变量,因为该字符串被单引号包围(并且变量没有转义)
通过eval函数运行相同的字符串将计算该字符串中的变量
输出为
这是一个$string,其中包含我的$name
这是一个杯子,里面有我的咖啡
这都在你的例子页面上解释过了,
还记得字符串插值吗?这不会显示其中变量的值,对吗?因为变量在单引号中不起作用。现在如果你说
eval("\$str = \"$str\";");
这实际上是评估这个PHP表达式
$str="$str";
你看到的反斜杠只是为了转义所需的字符。如果你把它说成
eval(" \$myNewString = \"$str\"; " );
echo $myNewString;
由于eval的这个参数是一个PHP表达式,现在带有双引号,因此将对它进行求值,这些变量现在将向该字符串给出它们的值。用同一个表达式加上单引号,同样是行不通的 将执行它得到的字符串,就像它是PHP代码一样
$string = 'cup';
$name = 'coffee';
这几乎是不言自明的。两个值存储在两个变量中,$string
和$name
$str = 'This is a $string with my $name in it.';
echo $str. "<br>";
\$str
-使用\
对变量进行转义,以避免将其解释为字符串。如果从开头删除反斜杠,PHP将抛出一个解析错误
\“$str\”代码>--此处使用变量的实际值,反斜杠用于转义双引号
运行时,要执行的PHP代码如下所示:
$str = "This is a $string with my $name in it.";
最后,您只是像正常情况一样回显变量,它只会输出:
This is a cup with my coffee in it.
eval()
函数与其他函数一样,如果使用不当,可能非常危险。手册警告您:
eval()语言构造非常危险,因为它允许执行任意PHP代码。因此,不鼓励使用它。如果您已经仔细验证了除了使用此构造之外没有其他选择,请特别注意,在未事先正确验证的情况下,不要将任何用户提供的数据传递到该构造中
运行此命令时会得到什么输出?它滥用eval
,使用双引号替换原来单引号字符串中的$vars
。我建议不要使用这个,因为有各种各样的问题,例如“
s在源字符串中。您缺少一半的解释。。。更糟糕的是,你只是在重复手册页上的内容,根据问题判断,OP很可能已经在阅读了。你是在说这就是它的基本功能:$str=“$str”代码>但当我运行该代码时,输出是:这是一个$string,其中包含我的$name。您是否认为这两行代码是相同的:eval(“\$str=\”$str\”;”)代码>vs$str=“$str”
@user1720897:在这个特定的示例中,是的,它们是相同的。然而,这不是eval的用途。可能会更好地演示使用方法。但是运行这两个代码会导致单独的输出-eval(“\$str=\“$str\”;”)代码>输出这是一个杯子,里面有我的咖啡,而$str=“$str”
outputs这是一个$string,其中包含我的$name。@user1720897:如果使用双引号而不是单引号,则它将是相同的。看见
"\$str = \"$str\";"
$str = "This is a $string with my $name in it.";
This is a cup with my coffee in it.