PHP 論理演算子における & と && の類似点と相違点
php には 5 つの算術演算子 (+ - * / %)、6 つの代入演算子 (+= -= *= /= %= .=)、および 8 つの比較演算子 (=== < > ; <= >) があります。 ;= != <> !==)、6 つの論理演算子 (&&、||、&、|、! など)。論理 AND & は and として記述でき、論理 or | は or として記述できます。 )、およびその他の演算子 (エラー制御演算子 @、実行演算子バックティック "-- は一重引用符ではありません、文字列演算子 . および .=、インクリメント/デクリメント演算子 ++/--、三項演算子 ?:)。
オペレーターの優先順位については、関連ドキュメントを参照してください。
php の & と && の類似点と相違点
<?php $a=10; if($a>4 && (++$a>10)) { } //输出结果为11. echo $a; ?> <?php $a=10; if($a>4 and (++$a>10)) { } //输出结果为11. echo $a; ?> ************************************************************** <?php $a=10; if($a>4 && (++$a<10)) { } //输出结果为11. echo $a; ?> <?php $a=10; if($a>4 & (++$a<10)) { } //输出结果为11. echo $a; ?> ********************************************************* <?php $a=10; if($a<4 && (++$a>10)) { } //输出结果为10. echo $a; ?> <?php $a=10; if($a<4 & (++$a>10)) { } //输出结果为11. echo $a; ?> ******************************************************************* <?php $a=10; if($a<4 && (++$a<10)) { } //输出结果为10. echo $a; ?> <?php $a=10; if($a<4 & (++$a<10)) { } //输出结果为11. echo $a; ?> ******************************************************************* <?php // 下面的 sktest() 不被调用,原因是它们被运算符“短路”。 $a = (false && sktest()); $b = (true || sktest()); $c = (false and sktest()); $d = (true or sktest()); // "||" 的优先级比 "or" 高 $e = false || true; // $e 被赋值为 (false || true),结果为 true $f = false or true; // $f 被赋值为 false [Altair注:"=" 的优先级比 "or" 高] var_dump($e, $f); // "&&" 的优先级比 "and" 高 $g = true && false; // $g 被赋值为 (true && false),结果为 false $h = true and false; // $h 被赋值为 true [Altair注:"=" 的优先级比 "and" 高] var_dump($g, $h); ?>
式 1 $a && $b、式 2 $a & $b
1. 類似性: $a と $b が両方とも true の場合、両方の式が true になります。どちらの演算子も、この式の結果には影響しません。
2. 相違点: $a && $b の式の && の前の $a が false の場合、その式は false であると判断されます。このとき、論理演算子 && の後の $b は計算されなくなります。いわゆる「オペレーター」。式 $a & $b の場合、& の前の $a が true か false かに関係なく、式の後の $b を計算する必要があります。論理演算子の実行後に $b を実行するかどうかは、後続のデータとプログラムの結果に影響を与える可能性があります。論理演算子 || の類似点と相違点は上記と同じです。