私が間違っている場合は訂正してください。ただし、上記のコードから、$ 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);