1. 优先级
结合性 | 运算符 | 备注 |
---|---|---|
clone new | 不能用在基本类型上 | |
左 | [ | array() |
右 | ++ -- ~ @ 强制转换 | |
instanceof | 类型 | |
右 | ! | 逻辑运算符 |
左 | * / % | 算数运算符 对 % : 余数符号与被除数相同, 运算时两操作数的小数部分会被丢弃 |
左 | + - . | 算法运算符、字符串拼接符 |
左 | << >> | 位运算符 |
=== !== == !== <> < <= > >= | 比较运算符 | |
左 | & | 位运算符、取引用 |
左 | ^ | 位运算符 |
左 | | | 位运算符 |
左 | && | 逻辑运算符 |
左 | || | 逻辑运算符 |
左 | ?: | 三元运算符 |
右 | = += -= *= /= .= %= &= ^= |= <<= >>= => | 赋值运算符 |
左 | and | 逻辑运算符 |
左 | xor | 逻辑运算符 |
左 | or | 逻辑运算符 |
左 | , | 逗号运算符 |
2. 技巧
(1) 三元操作符
// 一种初始化简单方法
$var = get_var() ? : $default;
(2) 位操作 << >>
这两种操作法能用来优化整型的乘除法, 注意操作数的小数部分会被抛弃
使用时注意可能带来的溢出
// $num 乘以 2 的 $expt 次方
$result <<= $expt;
// $num 除以 2 的 $expt 次方
$num >>= $expt;
(3) 逻辑运算符 and or
这两种运算符某些时候可以用来替代 if 结构
$var = do_something() and do_if_something_success();
$var = do_something() or do_if_something_wrong();