まずはコードを見てみましょう
初めての方は、最終出力が 5 20 であることが一目でわかるかもしれませんが、よく見てみると、() 内の条件式は代入演算ですなので、11 21 と出力されるはずです。しかし、コンピュータは私たちから始まります。面白くないジョークです。彼女の妹の最終出力は 1 21 でした。
コンピューターの思考と人間の脳の思考には違いがあります。プログラミングするときは、コンピューターの思考モード、つまり機械的思考モードを理解する必要があります。この論理式を判定する場合、まず $a と $b に値を代入し、その後 AND 演算を実行します。これは論理演算の結果には影響しませんが、上記の結果も生成されます。副作用。実際、コンピュータはリソースを節約するために、この論理式を解釈するために短絡演算方法を採用しています。 AND 演算子の前の値 ($a など) が false であることが判明した場合、AND 演算式の結果が false であると判断し、論理演算式から抜け出して次の演算を継続します。プログラムなし 式の残りのステートメントが実行されます。
ここで $a の値が 1 になっているのは、条件式で $a = 10 という演算を行う際に php が $a を boolean に変換するためです。上記の例では、$a = 10 が true に変換されるため、{} 内の $a++ は追加できません。ただし、中括弧内の $a++ を $a = $a + 1 に置き換えると、この時点で数値演算を実行できます。
ショートサーキット演算の本質は
論理 AND (&&)-> は、演算子の最初の式が false であるかどうかをチェックし、 false の場合は直接 false を返し、後続の式は無視されます。論理 OR (||)-> 演算子の最初の式が true であるかどうかを確認し、true であれば直接 true を返し、後続の式は直接無視されます。
PS: && は and よりも優先度が高く、|| は or よりも優先度が高く、等号 (=) は and および or よりも優先度が高くなります
補足$a = 5; $b = 20;if ($a = 10 || $b = 7) { $a++; $b++;}echo $a,"\n","",$b; //1 21ログイン後にコピー