了解 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."
瞧!
一个令人困惑的问题,但却是学习机制的一个很好的例子。
我是一名设计师,正在努力将自己升级为编码设计师。最近我一直在研究一些 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."
瞧!
一个令人困惑的问题,但却是学习机制的一个很好的例子。