## 运算符优先级
运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 *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
- 函数
- 用户自定义函数
- 函数的参数
- 返回值
- 可变函数
- 内部 (内置)函数
- 匿名函数
- 类与对象
- 简介
- 基本概念
- 属性
- 类的自动加载
- 构造函数
- 访问控制(可见性)