php中的运算符优先级
结合方向 | 运算符 | 备注 |
---|---|---|
--- | clone new | |
左 | [ | 数组下标 |
右-> | ** | 乘方 |
右-> | ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | 类型和递增/递减 |
--- | instanceof | 类型 |
右-> | ! | 逻辑非 |
左 | * / % | 算术运算符 |
左 | + - . | 算术运算符和字符串运算符 |
左 | << >> | 有符号左移和右移 |
--- | < <= > >= | 大小比较 |
--- | == != === !== <> <=> | 相等比较 |
左 | & | 位运算符和引用 |
左 | ^ | 位运算符 |
左 | | | 位运算符 |
左 | && | 逻辑运算符 |
左 | || | 逻辑运算符 |
左 | ?? | 比较运算符 |
左 | ? : | 条件运算符 |
右-> | = += -= *= **= /= .= %= &= |= ^= <<= >>= | 赋值运算符 |
左 | and | 逻辑运算符 |
左 | xor | 逻辑运算符 |
左 | or | 逻辑运算符 |
php中的逻辑运算符相比于C语言增加了and/xor/or,而且这些运算符的优先级最低,比赋值运算符还低。如果不考虑这些运算符,则赋值运算符的优先级最低,其次是三元条件运算符。
没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。
注意,下面的例子可能会有点出乎意料
function getbool(){
return false;
}
$a = 3;
if(!$a = getbool())
echo "true\n"; // true
else
echo "false\n";
var_dump($a); // bool(false)