演算子の優先順位は、2 つの式がどの程度「緊密に」バインドされるかを指定します。たとえば、乗算記号 ("*") はプラス記号 ("+") よりも優先されるため、式 1 + 5 * 3 は 18 ではなく 16 と評価されます。必要に応じて、括弧を使用して優先順位の変更を強制できます。例: (1 + 5) * 3 の値は 18 です。
演算子の優先順位が同じ場合、その結合方向によって、評価を右から左にするか左から右にするかが決まります。以下の例を参照してください。
次の表は、演算子を優先順位の高いものから低いものの順にリストしています。同じ行にある演算子は同じ優先順位を持ち、それらを組み合わせる方向によって評価の順序が決まります。
演算子の優先順位
結合方向 left [ array() right ++ -- ~ (int) (float ) (string) (array) (object) (bool) @ 型とインクリメント/デクリメント
None 型
right ! 論理演算子
left * / % 算術演算子
left + - . ビット演算子
None == != = == !== <> 比較演算子
left & & ビット演算子と参照
left ^ ビット演算子
left && 論理演算子
left ||三項演算子
right = += -= *= /= .= % = &= |= ^= <<= >>= => 代入演算子
left and and 論理演算子
left xor論理演算子
left または 論理演算子
left 、多くの場所 同じ優先順位の演算子に
を使用する場合、左の結合方向は評価が左から右に行われることを意味し、右の結合方向はその逆を意味します。結合方向のない同じ優先順位を持つ演算子は、それ自体と結合できない可能性があります。たとえば、PHP では 1 1 は無効なステートメントですが、1
例 #1 指示
<?php $a = 3 * 3 % 5; // (3 * 3) % 5 = 4 $a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2 $a = 1; $b = 2; $a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5 // mixing ++ and + produces undefined behavior $a = 1; echo ++$a + $a++; // may print 4 or 5 ?>
と組み合わせて括弧を使用すると、厳密に必要でない場合でも、多くの場合、コードの可読性が向上します。
注:
= の優先順位は他のほとんどの演算子よりも低いですが、PHP では引き続き次のような式が許可されています: if (!$a = foo())。この場合、foo() の戻り値は $a に割り当てられます。 。
例:
コマンドラインで次のコマンドを実行すると、出力される結果は false になります: