運算符優先級指定了兩個表達式綁定得有多“緊密”。例如,表達式 1 + 5 * 3 的結果是 16 而不是 18 是因爲乘號(“*”)的優先級比加號(“+”)高。必要時可以用括號來強制改變優先級。例如:(1 + 5) * 3 的值爲 18。
如果運算符優先級相同,那運算符的結合方向決定了該如何運算。例如,"-"是左聯的,那麼 1 - 2 - 3 就等同於 (1 - 2) - 3 並且結果是 -4. 另外一方面,"="是右聯的,所以 $a = $b = $c 等同於 $a = ($b = $c)。
沒有結合的相同優先級的運算符不能連在一起使用,例如 1 < 2 > 1 在PHP是不合法的。但另外一方面表達式 1 <= 1 == 1 是合法的, 因爲 == 的優先級低於 <=。
括號的使用,哪怕在不是必要的場合下,通過括號的配對來明確標明運算順序,而非靠運算符優先級和結合性來決定,通常能夠增加代碼的可讀性。
下表按照優先級從高到低列出了運算符。同一行中的運算符具有相同優先級,此時它們的結合方向決定求值順序。
結合方向 | 運算符 | 附加信息 |
---|---|---|
無 | clone new | clone 和 new |
右 | ** | 算術運算符 |
右 | ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | 類型、遞增/遞減、錯誤控制 |
無 | instanceof | 類型 |
右 | ! | 邏輯運算符 |
左 | * / % | 算術運算符 |
左 | + - . | 算術運算符 和 字符串運算符 |
左 | << >> | 位運算符 |
無 | < <= > >= | 比較運算符 |
無 | == != === !== <> <=> | 比較運算符 |
左 | & | 位運算符 和 引用 |
左 | ^ | 位運算符 |
左 | | | 位運算符 |
左 | && | 邏輯運算符 |
左 | || | 邏輯運算符 |
右 | ?? | null 合併運算符 |
左 | ? : | 三元運算符 |
右 | = += -= *= **= /= .= %= &= |= ^= <<= >>= | 賦值運算符 |
右 | yield from | yield from |
右 | yield | yield |
左 | and | 邏輯運算符 |
左 | xor | 邏輯運算符 |
左 | or | 邏輯運算符 |