例: $condition = "2 == 2 && 3 == 5" if ($condition) ;エコー 1;このように直接判定すると文字列定数とみなされ、値は true になります
ディスカッションへの返信(解決策)
if (eval("return $condition;")) {
$condition = "2<=2 && 2>=1 && (snb === snb || snb === hfu)"; if (eval("return $condition;")) { echo 1; }else { echo 2; }
2<=2 && 2>=1 && (snb === snb || snb === hfu)
$condition = "2<=2 && 2>=1 && (snb === snb || snb === hfu)"; if (eval("return $condition;")) { echo 1; }else { echo 2; } if (2<=2 && 2>=1 && ('snb' === 'snb' || 'snb' === 'hfu')) { echo 3; }
2 番目の段落は問題なく実行されます
最初の段落で eval() を呼び出すと、未定義定数エラーが報告されます。ここでエスケープする必要がありますか?
$condition = "2<=2 && 2>=1 && (snb === snb || snb === hfu)"; if (eval("return $condition;")) { echo 1; }else { echo 2; } if (2<=2 && 2>=1 && ('snb' === 'snb' || 'snb' === 'hfu')) { echo 3; }
あなたの本来の意図は ('snb' === 'snb' || 'snb' === 'hfu') でしたが、 $ 記号 存在しない変数は当然定数として理解されますが、定数を定義していません。
変数を使用して変換します。そうでない場合、snb と hfu は定数として解釈されます。
$snb="snb";$hfu="hfu"; $condition = '2<=2 && 2>=1 && ($snb === $snb || $snb === $hfu)'; if (eval("return $condition;")) { echo 1; }else { echo 2; }
ありがとう、マスターさん。