PHP 运算符:算术、比较、逻辑、三元、位运算及飞船运算符
PHP 运算符概述
PHP 支持丰富的运算符,包括数学运算、比较判断、逻辑组合、位操作等各种场景。
一、算术运算符
<?php\n$a = 10;\n$b = 3;\n\necho $a + $b; // 13 加\necho $a - $b; // 7 减\necho $a * $b; // 30 乘\necho $a / $b; // 3.333... 除\necho $a % $b; // 1 取余\necho $a ** $b; // 1000 10的3次方(幂,PHP 5.6+)\n\n// 复合赋值\n$a += 5; // $a = $a + 5 → 15\n$a -= 3; // $a = $a - 3 → 12\n$a *= 2; // $a = $a * 2 → 24\n$a /= 4; // $a = $a / 4 → 6\n$a %= 3; // $a = $a % 3 → 0\n\n// 递增/递减\n$a++; // 后置:先返回值再+1\n++$a; // 前置:先+1再返回值\necho $a++; // 先输出 $a,再 $a = $a + 1\necho ++$a; // $a = $a + 1,再输出\n?>
二、比较运算符
<?php\n$a = 5;\n$b = "5";\n$c = 10;\n\necho $a == $b; // true (值相等,自动类型转换)\necho $a === $b; // false (全等,类型也要相同)\necho $a != $b; // false (值不等)\necho $a !== $b; // true (不全等)\necho $a < $c; // true 小于\necho $a > $c; // false 大于\necho $a <= $b; // true 小于等于\necho $a >= $b; // true 大于等于\n?>
spaceship 运算符(太空船,PHP 7+)
<?php\n// 太空船运算符:返回 -1, 0, 1\n$a = 10;\n$b = 5;\n$result = $a <=> $b;\n// $a > $b → 1\necho $result; // 1\n\n$a = 5;\n$b = 5;\necho $a <=> $b; // 0 相等\n\n$a = 3;\n$b = 5;\necho $a <=> $b; // -1 $a < $b\n\n// 实用:usort 排序回调\n$users = [\n [''name'' => ''张三'', ''age'' => 25],\n [''name'' => ''李四'', ''age'' => 20],\n [''name'' => ''王五'', ''age'' => 30],\n];\nusort($users, fn($a, $b) => $a[''age''] <=> $b[''age'']);\n// 按 age 升序排列\n?>
三、逻辑运算符
<?php\n$a = true;\n$b = false;\n\n// AND / &&\necho $a && $b; // false\n\n// OR / ||\necho $a || $b; // true\n\n// XOR(异或,有且只有一个为 true)\necho $a xor $b; // true\necho $a xor $a; // false\n\n// NOT\necho !$a; // false\n\n// 短路求值\n$conn = null;\nif ($conn !== null && $conn->query("SELECT 1")) {\n echo "连接成功";\n}\n// 如果 $conn === null,前面的条件为 false,&& 后面不执行(避免报错)\n\n// ?? 空合并运算符(PHP 7+)\n$name = $_GET[''name''] ?? ''匿名'';\n?>
四、三元运算符与空合并
三元运算符
<?php\n// 语法:条件 ? 值1 : 值2\n$age = 20;\n$status = ($age >= 18) ? "成年" : "未成年";\necho $status; // 成年\n\n// 可省略中间部分(PHP 8 以前)\n$result = $age >= 18 ?: "未成年"; // 如果 age >= 18,返回 true,否则返回 $age\n?>
空合并运算符(??)
<?php\n// ?? 如果左边不为 null,返回左边;否则返回右边\n$name = $_GET[''name''] ?? ''匿名'';\n$config = $user[''settings''][''theme''] ?? ''light'';\n\n// 链式\n$value = $a ?? $b ?? $c ?? ''默认值'';\n?>
五、字符串运算符
<?php\n$a = "Hello";\n$b = "World";\n\necho $a . " " . $b; // Hello World(点号连接)\n\n$a .= " World"; // .= 是连接赋值\necho $a; // Hello World\n?>
六、位运算符
<?php\n$a = 5; // 二进制:0101\n$b = 3; // 二进制:0011\n\necho $a & $b; // 1 (0001) 按位AND\necho $a | $b; // 7 (0111) 按位OR\necho $a ^ $b; // 6 (0110) 按位XOR\necho ~$a; // -6 按位取反\necho $a << 1; // 10 左移1位(乘2)\necho $a >> 1; // 2 右移1位(除2)\n\n// 实用场景:权限系统\ndefine(''READ'', 1); // 0001\ndefine(''WRITE'', 2); // 0010\ndefine(''DELETE'', 4); // 0100\n\n$perm = READ | WRITE; // 0011,既有读权限又有写权限\nif ($perm & READ) echo "可读\\n";\nif ($perm & WRITE) echo "可写\\n";\nif ($perm & DELETE) echo "可删\\n";\n?>
七、运算符优先级
优先级从高到低(高优先级的运算符先计算):
<?php\n$result = (1 + 2) * 3; // 9(括号优先级最高)\n\n// 逻辑运算符:&& > ||\n// 注意:and/or 优先级很低,相当于赋值表达式\n$a = false or true; // ($a = false) or true; $a 为 false\n$a = false || true; // $a = (false || true); $a 为 true\n\n// 建议:用括号明确优先级\nif ($a && $b || $c) { } // 等于 ($a && $b) || $c\nif ($a && ($b || $c)) { } // 更清晰\n?>
总结
===比==严格,要求类型也相同??(空合并)是 PHP 7+ 语法糖,比三元更简洁<=>(太空船)适合排序回调and/or优先级很低,用&&/||更安全- 用括号明确优先级,不要靠记忆