了解 php 的 eval() 函数

Understanding the eval() function of php

我是一名设计师,正在努力将自己升级为编码设计师。最近我一直在研究一些 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\";")

合并后的字符串。

我真的想不通为什么这会起作用。

你应该得到两个 console.log 这样的

This is a $string with my $name in it.';

This is a $cup with my $coffe in it.';

为什么?好吧,首先你打印 $str 的值, 没有 eval,然后你 eval 它们,基本上这种情况发生了,

第一.

打印 $str,不进行评估。

This is a $string with my $name in it.';

第二

这段代码,运行 eval("$str = \"$str\";");

Eval 替换 $string$name。使用 2 个新变量值,即 $cup$coffe

希望你能明白

好的,这是我们拥有的:

eval("$str = \"$str\";")

看,字符串是双引号:表示$字符会被解释为变量开头。所以我们用反斜杠屏蔽这个字符:$,然后它会 "mean" 只是一个普通的美元符号。此外,字符串中的双引号也必须被屏蔽。

最后我们得到了这个字符串:(我将引号改为单引号所以 $ 不要混淆你):'$str = "$str";'。看,它现在看起来更像一个普通代码了:)

评估它,PHP 将执行以下操作(为方便起见,我删除了外部引号):

eval( $str = "$str" ); 

还要注意这里的双引号。这意味着里面的变量再次是 parsed/interpreted。

因为$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."

瞧!
一个令人困惑的问题,但却是学习机制的一个很好的例子。