-3

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) {

   ...

}

ありがとうございました

4

1 に答える 1

0

私が間違っている場合は訂正してください。ただし、上記のコードから、$ condition文字列を評価すると、再び$conditionに戻されます。評価されたコードに「return」が含まれていない限り、nullを返します(reff: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"; }

文字列の折り返しはそのままになるので、「」を「」に変更してください(「」を中に入れたい場合は、バックスラッシュ(\)を使用してエスケープしてください)。

私の回避策:

$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);
于 2013-03-22T01:00:40.163 に答える