我是一名设计师,试图将自己升级为编码设计师。最近我一直在研究一些PHP代码和手册,然后我遇到了eval()
函数的示例代码:
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
这是官方PHP网站中eval()
函数的示例代码,虽然它确实帮助我理解了eval()
函数,但我无法弄清楚示例代码是如何工作的。更具体一点,我无法理解为什么
("\$str = \"$str\";")
会产生合并的字符串。
我真的无法弄清楚为什么这应该有用。
答案 0 :(得分:0)
你应该得到两个这样的console.log
This is a $string with my $name in it.';
This is a $cup with my $coffe in it.';
为什么呢?首先,您打印$str
,没有 eval的值,稍后,您将评估它们,基本上会发生这种情况,
<强>首先强>
打印$str
,没有评估。
This is a $string with my $name in it.';
第二
这段代码,运行eval("\$str = \"$str\";");
Eval替换$string
和$name
。使用2个新变量值,即$cup
和$coffe
希望你明白
答案 1 :(得分:0)
好的,这就是我们所拥有的:
eval("\$str = \"$str\";")
看,字符串是双引号:它表示$
字符将被解释为变量start。所以我们用反斜杠\$
来屏蔽这个角色,然后它将&#34;表示&#34;只是一个正常的美元符号。此外,字符串中的双引号也必须进行筛选。
最后我们得到了这个字符串:(我将引号更改为单引号,因此$
不要混淆你):'$str = "$str";'
。看,它现在看起来更像是普通代码:)
评估它,PHP将执行以下操作(为方便起见,我删除了外部引号):
eval( $str = "$str" );
请注意这里的双引号。这意味着内部的变量将再次被解析/解释。
由于$str
原来是== 'This is a $string with my $name in it.'
,它会被插入到表达式中,现在它看起来像:
$str = "This is a $string with my $name in it.";
再次,双引号!它解析并替换变量$name
和$string
,最后给我们:
$str = "This is a cup with my coffee in it."
瞧!
一个令人心碎的人,但却是学习机制的一个很好的例子。