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

小飞兽 PHP 17 次阅读 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次方(幂,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 优先级很低,用 &&/|| 更安全
  • 用括号明确优先级,不要靠记忆