在eval上使用str_replace更改变量

时间:2013-03-22 00:47:28

标签: php eval str-replace

我想知道如何在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);

问题是,不要更改变量..看看更改结果是YES还是NO ...

我想在我的WHILE Expression

上使用这项工作
while($condition) {

   ...

}

谢谢

1 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我,但是从上面的代码中,当你评价条件字符串时,你又把它重新置于$ condition状态。除非您的评估代码中包含“return”,否则它将返回null(reff:http://php.net/manual/en/function.eval.php)。

但是你的问题实际上是错误地使用“on $ condition。当你使用”来包装php上的字符串时,它会将该字符串上的每个变量更改为在该代码之上为该变量定义的值。 / p>

所以,让您的代码通过php进行评估,实际上是将错误的代码发送到eval()。

您当前的$条件代码是:

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"; }

请更改“to”,因为字符串换行将会保持原样(如果你想把它放入其中,请使用反斜杠(\)将其转义),看看会发生什么。

我的工作:

$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);