PHP 运算符对照表
免费使用
超详细版
可复制
PHP 运算符完整速查表,涵盖算术、比较(== vs === 陷阱)、逻辑(&& vs and 优先级陷阱)、位运算、赋值、三元、空合并 ??、太空船 <=>、错误控制 @、执行运算符、数组运算符、字符串拼接等全部内容。
| 分类 | 运算符 | 名称 | 示例代码 | 结果 | 说明 / 注意事项 |
|---|---|---|---|---|---|
| 算术运算符 | |||||
| + | 加法 | 1 + 2 // 3 | 字符串拼接用 . 不是 + | ||
| - | 减法 | 5 - 3 // 2 | |||
| * | 乘法 | 3 * 4 // 12 | |||
| / | 除法 | 10 / 3 // 3.333... | PHP 除法始终返回 float;整数除用 intdiv() | ||
| % | 取模 | 10 % 3 // 1 | 结果符号与被除数相同;浮点取模用 fmod() | ||
| ** | 幂运算 | 2 ** 10 // 1024 | PHP 5.6+ 引入,等价于 pow() | ||
| ++ | 自增 | $a=5; $a++; // 6 | 前缀先加后用,后缀先用后加 | ||
| -- | 自减 | $a=5; $a--; // 4 | |||
| 比较运算符 | |||||
| == | 松散等于 | 5 == "5" // true | 会类型转换;是 PHP 最大陷阱来源 | ||
| === | 严格等于 | 5 === "5" // false | 类型和值都相同时才为 true;推荐始终使用 | ||
| != | 松散不等于 | 5 != "3" // true | |||
| !== | 严格不等于 | 5 !== "5" // true | |||
| < | 小于 | 3 < 5 // true | |||
| > | 大于 | 5 > 3 // true | |||
| <= | 小于等于 | 3 <= 5 // true | |||
| >= | 大于等于 | 5 >= 5 // true | |||
| <=> | 太空船(三路比较) | 5 <=> 3 // 1 | PHP 7+;返回 -1/0/1;可链式比较 | ||
| 逻辑运算符 | |||||
| && | 逻辑与(短路) | true && false // false | 与 and 优先级不同 | ||
| || | 逻辑或(短路) | true || false // true | 与 or 优先级不同 | ||
| ! | 逻辑非 | !true // false | |||
| and | 逻辑与(低优先级) | true and false // false | 优先级低于 =,注意赋值陷阱 | ||
| or | 逻辑或(低优先级) | false or true // true | $a = false or true; // $a=false(陷阱) | ||
| xor | 逻辑异或 | true xor false // true | 两操作数不同为 true;极少使用 | ||
| 位运算符 | |||||
| & | 按位与 | 5 & 3 // 1 | 字符串也可按字节位运算 | ||
| | | 按位或 | 5 | 3 // 7 | |||
| ^ | 按位异或 | 5 ^ 3 // 6 | 字符串异或按字节;可用于简单加密 | ||
| ~ | 按位取反 | ~5 // -6 | |||
| << | 左移 | 5 << 1 // 10 | 左移 n 位 = 乘以 2^n | ||
| >> | 右移 | -8 >> 1 // -4 | PHP 5.6+ 支持负数右移(算术右移) | ||
| 赋值运算符 | |||||
| = | 赋值 | $a = 10; | PHP 中对象赋值是引用赋值(同一对象) | ||
| += | 加等 | $a += 3; // $a=$a+3 | |||
| -= | 减等 | $a -= 3; | |||
| *= | 乘等 | $a *= 3; | |||
| /= | 除等 | $a /= 3; | |||
| %= | 模等 | $a %= 3; | |||
| **= | 幂等 | $a **= 2; | PHP 7.4+ | ||
| &= |= ^= | 位运算赋值 | $a &= 3; | |||
| <<= >>= | 位移赋值 | $a <<= 1; | |||
| .= | 字符串连接等 | $s .= "!"; | PHP 特有:字符串拼接赋值 | ||
| 三元运算符 | |||||
| ? : | 三元 | $age>=18?"成年":"未成年" | 可省略中间:?:(PHP 5.3+ 猫王运算符) | ||
| 猫王运算符 | |||||
| ?: | 简写三元 | $name = $_GET["name"] ?: "匿名"; | 等价于 $x?$x:$y;$x 不能为 null | ||
| 空合并运算符 | |||||
| ?? | 空合并 | $name = $_GET["name"] ?? "匿名"; | PHP 7+;仅对 null/undefined 生效;可链式 ?? ?? | ||
| 空合并赋值 | |||||
| ??= | 空合并赋值 | $a ??= "默认"; | PHP 7.4+;仅 $a 为 null 时才赋值 | ||
| 错误控制运算符 | |||||
| @ | 抑制错误 | @file_get_contents($f); | 抑制表达式产生的 Notice/Warning;性能开销大 | ||
| 执行运算符 | |||||
| ` ` | 反引号执行 | $output = `ls -la`; | 等价于 shell_exec();不安全,禁用 passthru 场景 | ||
| 字符串运算符 | |||||
| . | 字符串拼接 | "hello" . " " . "world" | PHP 特有;不同于 JS 的 + | ||
| .= | 拼接赋值 | $s .= "!"; | |||
| 数组运算符 | |||||
| + | 数组合并 | [1,2]+[3,4] // [1,2] | 键名相同时保留左操作数的值 | ||
| == | 数组相等 | [1,2]==[1,2] // true | 键和值都相同(顺序无关) | ||
| === | 数组恒等 | [1,2]===[1,2] // true | 键、值、类型、顺序都相同 | ||
| 类型运算符 | |||||
| instanceof | 实例检测 | $obj instanceof MyClass | true/false | 检测对象是否为某类/接口实例 | |
| 递增/递减陷阱 | |||||
| ++ | 字符串自增 | $a="a"; $a++; // "b" | PHP 特有:字符串也能 ++(进位制) | ||
| ++ | 字符串进位 | $a="z"; $a++; // "aa" | 类似 Excel 列名进位(a→z→aa→ab) | ||
| 引用赋值 | |||||
| =& | 引用赋值 | $b =& $a; | PHP 特有引用;修改 $b 影响 $a | ||
| 优先级陷阱 | |||||
| = vs == vs === | 赋值/比较 | if($a=1) vs if($a==1) | = 是赋值返回右值,== 才是比较 | ||
| 优先级(高→低) | |||||
| clone new | 创建对象 | new MyClass() | 最高(new 优先级高) | ||
| ++ -- ~ (int) @ | 单目前缀 | !flag / ~$a | |||
| ** | 幂运算 | 2**3**2 // 512 | 右结合 | ||
| * / % | 乘除模 | $a*$b/$c | |||
| + - . | 加减/拼接 | $a+$b / "a"."b" | . 拼接优先级低于 + | ||
| << >> | 位移 | ||||
| < <= > >= | 比较 | ||||
| == != === !== <> <=> | 相等/太空船 | ||||
| & | 按位与 | ||||
| ^ | 按位异或 | ||||
| | | 按位或 | ||||
| && | 逻辑与 | ||||
| || | 逻辑或 | ||||
| ?? | 空合并 | 右结合 | |||
| ? : | 三元 | 右结合 | |||
| 优先级(低→高) | |||||
| = += 等 | 赋值 | 从右向左 | |||
| 优先级(最低) | |||||
| and or xor | 逻辑(低优) | 比 = 还低,注意陷阱 | |||
PHP 运算符注意事项(重点避坑)
- •
==会做类型转换(0 == "0"为 true),永远优先使用=== - •
and和or优先级低于=:$a = false or true;结果是$a = false(先赋值再 or) - •
??(PHP 7+)仅对 null 生效;?:对一切假值(0、""、false)都生效 - •
@错误抑制符有性能开销,且被抑制的错误仍可通过自定义处理器捕获 - • 字符串自增是 PHP 独有特性:
"z"++ → "aa",类似 Excel 列名 - •
.是字符串拼接,+是算术加;"5" + 2 = 7(字符串被转数字) - •
intdiv(10, 3)做整数除法(PHP 7+),/始终返回 float - •
<=>太空船运算符返回 -1/0/1,非常适合作为 usort 的比较函数 - • 对象赋值是引用赋值(同一实例),真正克隆要用
clone
== vs ===
== 类型转换后比较;=== 类型和值都检查
?? 空合并
$a ?? $b ?? "默认" 链式取值,仅 null 时降级
@ 抑制错误
有性能开销;生产环境应配合错误处理器而非滥用
<=> 太空船
$a <=> $b 返回 -1/0/1,排序回调一行搞定
