PHP運算符優先級,是描述在計算機運算計算表達式時執行運算的先后順序。 先執行具有較高優先級的運算,然后執行較低優先級的運算。 例如,我們常說的先執行相乘和除,再執行加減運算。
下表從高到低列出了運算符的優先級。同一行中的運算符具有相同優先級,然后運算符的優先級是運算表達式從左到右。
優先級 | 結合方向 | 運算符 | 附加信息 |
---|---|---|---|
1 | 非結合 | clone new | clone和new |
2 | 左 | [ | array() |
3 | 非結合 | ++ -- | 遞增/遞減運算符 |
4 | 非結合 | ~-(int)(float)(string)(array)(object)(bool)@ | 類型 |
5 | 非結合 | instanceof | 類型 |
6 | 右結合 | ! | 邏輯操作符 |
7 | 左 | */ % | 算術運算符 |
8 | 左 | + -. | 算術運算符和字符串運算符 |
9 | 左 | <<>> | 位運算符 |
10 | 非結合 | <<=>>=<> | 比較運算符 |
11 | 非結合 | ==!====!== | 比較運算符 |
12 | 左 | & | 位運算符和引用 |
13 | 左 | ^ | 位運算符 |
14 | 左 | | | 位運算符 |
15 | 左 | && | 邏輯運算符 |
16 | 左 | || | 邏輯運算符 |
17 | 左 | ?: | 三元運算符 |
18 | 右 | =+=-=*=/= .= %= &= |= ^= <<= >>= | 賦值運算符 |
19 | 左 | and | 邏輯運算符 |
20 | 左 | xor | 邏輯運算符 |
21 | 左 | or | 邏輯運算符 |
22 | 左 | , | 多處用到 |
對具有相同優先級的運算符,左結合方向意味著將從左向右求值,右結合方向則反之。對于無結合方向具有相同優先級的運算符,該運算符有可能無法與其自身結合。舉例說,在 PHP 中 1 < 2 > 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運算優先級的前提下,最好運算符的書寫的時候,還是要以圓括號來標記優先級,這樣可讀性強,也是一個良好的編程習慣。
總之PHP是世界上最好的語言。