PHP 运算符:算术、比较、逻辑、三元、位运算、飞船运算符

小飞兽 PHP 12 次阅读 2026-07-16

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次方(幂)\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++;           // 后置递增\n++$a;           // 前置递增\n$a--;           // 后置递减\n--$a;           // 前置递减\necho $a++;      // 先返回再+1\necho ++$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  大于等于\necho $a <> $c;   // true  不等于(等价于 !=)\n?>

spaceship 运算符(太空船运算符,PHP 7+)

<?php\n// 返回 -1, 0, 1\n$a = 10;\n$b = 5;\n\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,后面的 query 不会执行(避免报错)\n\n// 或运算短路\n$name = $_GET['name'] ?? '匿名';  // 如果没有 name 参数,用默认值\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// 语法:条件 ? 值1 : 值2\n$age = 20;\n$status = ($age >= 18) ? "成年" : "未成年";\necho $status;   // 成年\n\n// 可嵌套(不推荐,影响可读性)\n$score = 85;\n$grade = $score >= 90 ? "A" : ($score >= 60 ? "B" : "C");\n\n// 可省略中间部分(PHP 8 以前)\n$result = $age >= 18 ?: "未成年";  // 如果 age >= 18,返回 true,否则返回 $age 的值\n?>

空合并运算符(PHP 7+)

<?php\n// ?? 如果左边不为 null,返回左边;否则返回右边\n$name = $_GET['name'] ?? '匿名';\n$config = $user['settings']['theme'] ?? 'light';\n\n// 可链式\n$value = $a ?? $b ?? $c ?? '默认值';\n\n// 注意:?? 和 isset() 配合使用场景\n// 旧写法:isset($_GET['name']) ? $_GET['name'] : '匿名'\n// 新写法:$_GET['name'] ?? '匿名'\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,既有读权限又有写权限\n\nif ($perm & READ) echo "可读\\n";    // 0011 & 0001 = 0001 → true\nif ($perm & WRITE) echo "可写\\n";   // 0011 & 0010 = 0010 → true\nif ($perm & DELETE) echo "可删\\n";  // 0011 & 0100 = 0000 → false\n?>

七、类型运算符

<?php\nclass User {}\nclass Admin extends User {}\n\n$user = new User();\n$admin = new Admin();\n\n// instanceof 判断对象是否是某个类的实例\necho $user instanceof User;     // true\necho $admin instanceof User;   // true(子类实例也是父类实例)\necho $admin instanceof Admin;  // true\n\n// 也能判断是否实现了某个接口\nclass Repository implements Interface {}\n?>

八、运算符优先级

优先级从高到低(高优先级的运算符先计算):

<?php\n// 括号优先级最高\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/xor 要小心优先级陷阱,优先用 &&/||/!
  • 用括号明确优先级,不要靠记忆