在eval上使用str_replace改变变量


change variables using str_replace on eval

我想知道如何改变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表达式

while($condition) {
   ...
}

谢谢

如果我错了,请纠正我,但是从上面的代码中,当你eval你的$condition字符串时,你把它放回$condition。除非你计算的代码中有"return",否则它将返回null (ref: http://php.net/manual/en/function.eval.php)。

但是你的问题实际上是没有正确使用" on $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"; }

请将"更改为',因为字符串(s)在'中换行将保持原样(如果您想将'放入其中,请使用反斜杠(')转义),看看会发生什么。

my work around:

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