Php 使用str_replace on eval更改变量

Php 使用str_replace on eval更改变量,php,eval,str-replace,Php,Eval,Str Replace,我想知道如何在eval上更改变量 看代码,请帮帮我 $status = "HD"; $vari = "XX"; $condition = "if($status<>'99' && $status<>'XX' && $status<>'XM' && $status<> 'XD' && $status<> 'XY' && $status<> 'X

我想知道如何在eval上更改变量

看代码,请帮帮我

$status = "HD";

$vari = "XX";

$condition = "if($status<>'99' && $status<>'XX' && $status<>'XM' && $status<> 'XD' && $status<> 'XY' && $status<> 'XE') 
{ echo 'YES'; } else { echo 'NO'; }";

$condition = eval($condition );

echo $condition;
echo "<hr>";

$resp = str_replace('status','vari',$condition);
echo eval($resp);

谢谢

如果我错了,请纠正我,但是从上面的代码来看,当您计算$condition字符串时,您会将其重新放入$condition。除非计算代码中包含return,否则它将返回null reff:

但您的问题实际上是在$condition上无法使用。当您在php上使用包装字符串时,它会将该字符串上的每个变量更改为该代码上方为该变量定义的值

因此,不是让php对代码进行求值,而是将错误的代码发送到eval

您当前的$condition代码为:

if(HD<>'99' && HD<>'XX' && HD<>'XM' && HD<> 'XD' && HD<> 'XY' && HD<> 'XE') { echo 'YES'; } else { echo 'NO'; }
你想要达到的是:

if($status<>"99" && $status<>"XX" && $status<>"XM" && $status<> "XD" && $status<> "XY" && $status<> "XE") { echo "YES"; } else { echo "NO"; }
请更改为“因为字符串换行”将保持原样,如果您想在其中放入,请使用反斜杠\对其进行转义,然后查看发生了什么

我的工作重点是:

$status = "HD";
$vari = "XX";
$condition = 'if($status<>"99" && $status<>"XX" && $status<>"XM" && $status<> "XD" && $status<> "XY" && $status<> "XE") { echo "YES"; } else { echo "NO"; }';
eval($condition );
echo $condition;
echo "<hr>";
$resp = str_replace('status','vari',$condition);
eval($resp);

如果您必须使用eval,那么您会遇到一些严重的麻烦,请不要在所有大写字母中键入您的问题。它很难读懂,也不会让你很快得到帮助,而且很烦人。这也被认为是喊叫,这是粗鲁的。谢谢。您的第二个$condition=更改condition的值。由于您的语句不返回任何内容,$condition将为null。所以,$resp是null上的str_替换。这仍然是空的。真正的问题是-为什么必须使用eval,而不将代码直接放在循环中或其他任何地方!?请参阅,并注意eval$str不会返回它作为参数收到的相同字符串。正如@kainaw所观察到的,在第二次str_replace尝试之前,您已经用它返回的内容覆盖了它。@Mock。拉西德,谢谢你,你的两个结果每次都很棒,但我的两个结果是什么??不管怎样,在使用eval之前,请像上面的其他评论一样看另一种方式。我宁愿使用while生成一个新的php文件。。然后重定向用户以执行该php文件。我是否可以使用$variable='yes'或false$variable='no'作为结果,而不是echo'yes'echo'no'?您可以使用$result=eval$条件,在$condition内,您可以用return替换echo。然后,在$result=eval$条件下,您可以尝试回显它,以确定结果是否正确传递。
$status = "HD";
$vari = "XX";
$condition = 'if($status<>"99" && $status<>"XX" && $status<>"XM" && $status<> "XD" && $status<> "XY" && $status<> "XE") { echo "YES"; } else { echo "NO"; }';
eval($condition );
echo $condition;
echo "<hr>";
$resp = str_replace('status','vari',$condition);
eval($resp);