## 運算符優先級
運算符優先級指定了兩個表達式綁定得有多“緊密”。例如,表達式 *1 + 5 \* 3* 的結果是 *16* 而不是 *18* 是因為乘號(“\*”)的優先級比加號(“+”)高。必要時可以用括號來強制改變優先級。例如:*(1 + 5) \* 3* 的值為 *18*。
如果運算符優先級相同,那運算符的結合方向決定了該如何運算。例如,"-"是左聯的,那么 *1 - 2 - 3* 就等同于 *(1 - 2) - 3* 并且結果是 *\-4*. 另外一方面,"="是右聯的,所以 *$a = $b = $c* 等同于 *$a = ($b = $c)*。
沒有結合的相同優先級的運算符不能連在一起使用,例如 *1 1* 在PHP是不合法的。但另外一方面表達式 *1 <= 1 == 1* 是合法的, 因為 *\==* 的優先級低于 *<=*。
括號的使用,哪怕在不是必要的場合下,通過括號的配對來明確標明運算順序,而非靠運算符優先級和結合性來決定,通常能夠增加代碼的可讀性。
下表按照優先級從高到低列出了運算符。同一行中的運算符具有相同優先級,此時它們的結合方向決定求值順序。
**運算符優先級**
| 結合方向 | 運算符 | 附加信息 |
| --- | --- | --- |
| 無 | clone new | [clone](http://php.net/manual/zh/language.oop5.cloning.php) 和 [new](http://php.net/manual/zh/language.oop5.basic.php#language.oop5.basic.new) |
| 左 | *\[* | [array()](http://php.net/manual/zh/function.array.php) |
| 右 | *\*\** | [算術運算符](http://php.net/manual/zh/language.operators.arithmetic.php) |
| 右 | *++* *\--* *~* *(int)* *(float)* *(string)* *(array)* *(object)* *(bool)* *@* | [類型](http://php.net/manual/zh/language.types.php)和[遞增/遞減](http://php.net/manual/zh/language.operators.increment.php) |
| 無 | *instanceof* | [類型](http://php.net/manual/zh/language.types.php) |
| 右 | *!* | [邏輯運算符](http://php.net/manual/zh/language.operators.logical.php) |
| 左 | *\** */* *%* | [算術運算符](http://php.net/manual/zh/language.operators.arithmetic.php) |
| 左 | *+* *\-* *.* | [算術運算符](http://php.net/manual/zh/language.operators.arithmetic.php)和[字符串運算符](http://php.net/manual/zh/language.operators.string.php) |
| 左 | *>* | [位運算符](http://php.net/manual/zh/language.operators.bitwise.php) |
| 無 | ** *\>=* | [比較運算符](http://php.net/manual/zh/language.operators.comparison.php) |
| 無 | *\==* *!=* *\===* *!==* ** | [比較運算符](http://php.net/manual/zh/language.operators.comparison.php) |
| 左 | *&* | [位運算符](http://php.net/manual/zh/language.operators.bitwise.php)和[引用](http://php.net/manual/zh/language.references.php) |
| 左 | *^* | [位運算符](http://php.net/manual/zh/language.operators.bitwise.php) |
| 左 | *|* | [位運算符](http://php.net/manual/zh/language.operators.bitwise.php) |
| 左 | *&&* | [邏輯運算符](http://php.net/manual/zh/language.operators.logical.php) |
| 左 | *||* | [邏輯運算符](http://php.net/manual/zh/language.operators.logical.php) |
| 左 | *??* | [比較運算符](http://php.net/manual/zh/language.operators.comparison.php) |
| 左 | *? :* | [ternary](http://php.net/manual/zh/language.operators.comparison.php#language.operators.comparison.ternary) |
| right | *\=* *+=* *\-=* *\*=* *\*\*=* */=* *.=* *%=* *&=* *|=* *^=* *>=* | [賦值運算符](http://php.net/manual/zh/language.operators.assignment.php) |
| 左 | *and* | [邏輯運算符](http://php.net/manual/zh/language.operators.logical.php) |
| 左 | *xor* | [邏輯運算符](http://php.net/manual/zh/language.operators.logical.php) |
| 左 | *or* | [邏輯運算符](http://php.net/manual/zh/language.operators.logical.php) |
- 序言
- 簡介
- PHP是什么?
- PHP能做什么?
- 基本語法
- 類型
- boolean(布爾型)
- integer(整型)
- float(浮點型)
- string(字符串)
- array(數組)
- object(對象)
- callable(可調用)
- resource(資源)
- NULL(無類型)
- 偽類型
- 類型轉換的判別
- 變量
- 基礎
- 預定義變量
- 變量范圍
- 可變變量
- 來自PHP之外的變量
- 常量
- 語法
- 魔術常量
- 表達式
- 運算符
- 運算符優先級
- 算術運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 錯誤控制運算符
- 執行運算符
- 遞增/遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- if
- else
- elseif/else if
- 流程控制的替代語法
- while
- do-whille
- for
- foreach
- break
- continue
- switch
- declare
- return
- require
- include
- require_once
- include_once
- goto
- 函數
- 用戶自定義函數
- 函數的參數
- 返回值
- 可變函數
- 內部 (內置)函數
- 匿名函數
- 類與對象
- 簡介
- 基本概念
- 屬性
- 類的自動加載
- 構造函數
- 訪問控制(可見性)