演算子
PHP Manual

演算子の優先順位

演算子の優先順位は、二つの式が"緊密に"結合している度合いを指定します。 例えば、式 1 + 5 * 3 の答えは 16 になり、18 とはなりません。 これは乗算演算子("*")は、加算演算子("+")より高い優先順位を有するか らです。必要に応じて強制的に優先順位を設定するために括弧を使用する ことが可能です。例えば、18と評価するためには、 (1 + 5) * 3 とします。

演算子の優先順位が等しい場合は、その結合性によって評価順 (右から評価するのか、あるいは左から評価するのか) が決まります。 以下の例を参照ください。

次の表では、優先順位が高い順に演算子を挙げています。 同じ行にある演算子は優先順位が等しくなります。そのような場合は、 結合時の評価にしたがって評価順が決まります。

演算子の優先順位
結合時の評価 演算子 追加情報
結合しない clone new clone および new
left [ array()
right ++ -- ~ (int) (float) (string) (array) (object) (bool) @ および 加算子/減算子
結合しない instanceof
right ! 論理演算子
left * / % 代数演算子
left + - . 代数演算子 そして 文字列演算子
left << >> ビット演算子
結合しない < <= > >= 比較演算子
結合しない == != === !== <> 比較演算子
left & ビット演算子 そして リファレンス
left ^ ビット演算子
left | ビット演算子
left && 論理演算子
left || 論理演算子
left ? : 三項演算子
right = += -= *= /= .= %= &= |= ^= <<= >>= => 代入演算子
left and 論理演算子
left xor 論理演算子
left or 論理演算子
left , さまざまな利用法

演算子の優先順位が同じ場合、 結合時の評価が left の場合は式が左から右に評価され、一方 right の場合は その逆となります。 優先順位が同じ演算子で結合しないものが並んだ場合、自分自身で結合することはありません。 つまり、たとえば 1 < 2 > 1 のような文は PHP では無効になります。 一方 1 <= 1 == 1 は無効ではありません。というのも、 T_IS_EQUAL 演算子の優先順位が T_IS_SMALLER_OR_EQUAL 演算子より低いからです。

例1 結合時の評価

<?php
$a 
5// (3 * 3) % 5 = 4
$a true true 2// (true ? 0 : true) ? 1 : 2 = 2

$a 1;
$b 2;
$a $b += 3// $a = ($b += 3) -> $a = 5, $b = 5

// ++ と + を同時に使ったときの挙動は未定義です
$a 1;
echo ++
$a $a++; // 4 になるかもしれないし、5 になるかもしれません
?>
厳密には不要な場所であっても、括弧をつけておけばコードの可読性があがります。

注意:

= は他のほとんどの演算子よりも優先順位が低いはずなのにもかかわらず、 PHP は依然として if (!$a = foo()) のような式も許します。この場合は foo() の返り値が $a に代入されます。


演算子
PHP Manual