这里是一个代码,我不明白为什么输出的PHP代码:这是一个带有$ name的$ string。这是一杯我的咖啡。
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
// will not echo the value of the strings variable because there in ' '
echo $str. "\n";
// this function is like writing the php code outside of it
// it gets a string with php statments (;)
// because the code is written in a string
// if it is written it double quotes you have to escape $ and "
// and if it is written in single quotes you have to escape '
eval("\$str = \"$str\";");
//it is not like this, why?????
//eval('$str = "$str";');
// and not like this, why???????
//$str = "$str" ;
echo $str. "\n";
?>
为什么不是声明:eval('$ str =“$ str”;');或声明:$ str =“$ str”;做同样的事情:eval(“\ $ str = \”$ str \“;”);在此代码中
答案 0 :(得分:0)
//it is not like this, why?????
//eval('$str = "$str";');
因为输入字符串可能包含单引号,所以您不能使用它们来开始和结束字符串。
// and not like this, why???????
//$str = "$str" ;
因为你想要评估一个字符串,而且上面没有字符串。
我没有看到这个例子的意思,只是使用双引号:
<?php
$string = 'cup';
$name = 'coffee';
$str = "This is a $string with my $name in it.";
echo $str. "\n";
?>
答案 1 :(得分:0)
为什么在这种情况下你需要eval
?
单引号内的变量不会被解释,而是将它放在双引号下。
$str = "This is a $string with my $name in it."; //<--- Replaced single quotes to double quotes.
其次..如果您真的担心逃避,为什么不使用 HEREDOC
语法
<?php
$string = 'cup';
$name = 'coffee';
$cont=<<<ANYCONTENT
This is a $string with my $name in it. This text can contain single quotes like this ' and also double quotes " too.
ANYCONTENT;
echo $cont;
输出:
This is a cup with my coffee in it. This text can contain single quotes like this ' and also double quotes " too.
答案 2 :(得分:0)
双引号字符串计算其中的所有变量。单引号字符串不会。
现在发表声明
eval("\$str = \"$str\";");
首先\$str
- &gt; $是转义的,所以它是一个文字,而不是$str
变量
秒$str
- &gt; $没有被转义,整个字符串都是双引号,所以这将成为
$str = "This is a $string with my $name in it."
现在评估这个PHP代码,它将右边的字符串分配给左边的变量。因此$str
成为This is a cup with my coffee in it
。
应避免使用评估。
答案 3 :(得分:0)
在第一个eval声明中:
eval("\$str = \"$str\";");
由于第二个$未被转义,并且您在整个争论中使用双引号,因此第二个$ str的值传递给eval,并且eval的参数变为:
eval("\$str = \"This is a $string with my $name in it.\";");
,在评估时,变为:
$str = "This is a $string with my $name in it.";
指定'这是一杯加入我的咖啡。'到$ str。
在第二个评估中:
eval('$str = "$str";');
评估的陈述是:
$str = "$str";
与您的第三个陈述相同。执行此语句时,它会将非字符串转换为字符串。在这种情况下,$ str已经是一个字符串,因此该语句对$ str。
的值没有影响希望这会有所帮助。 :)