🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 运算符 [toc] ## 1. 算术运算符 | 序号 | 运算符 | 示例 | 描述 | | ---- | ------ | ----------- | ------------------ | | 1 | `+` | `$a+$b` | $a与$b 的和 | | 2 | `-` | `$a-$b` | $a与$b 的差 | | 3 | `*` | `$a*$b` | $a与$b 的积 | | 4 | `/` | `$a/$b` | $a与$b 的商 | | 5 | `%` | `$a%$b` | $a与$b 的余(模) | | 6 | `++` | `$a++/++$a` | 先用再加/先加再用 | | 7 | `--` | `$a--/--$a` | 先用再减/先减再用 | | 8 | `**` | `2**4` | 幂运算:2 的 4 次方 | - `$a++`=>`$a = $a + 1`, `$a--`=>`$a = $a - 1` - `**`: 幂运算需要 `php5.6+`版本 --- ## 2. 字符串运算符 | 运算符 | 示例 | 描述 | | ------ | --------------- | ----------------------------- | | `.` | `$str1 . $str2` | 连接运算,返回连接之后的字符串 | --- ## 3. 赋值运算符 | 序号 | 运算符 | 示例 | 描述 | | ---- | ------ | ----------- | -------------------- | | 1 | `=` | `$a = 10` | 将表达式的值赋给变量 | | 2 | `+=` | `$a += 10` | `$a = $a + 10;` | | 3 | `-=` | `$a -= 10` | `$a = $a - 10;` | | 4 | `*=` | `$a *= 10` | `$a = $a * 10;` | | 5 | `/=` | `$a /= 10` | `$a = $a / 10;` | | 6 | `%=` | `$a %= 10` | `$a = $a % 10;` | | 7 | `.=` | `$a .= 'a'` | `$a = $a . 'a';` | --- ## 4. 比较运算符 | 序号 | 运算符 | 示例 | 描述 | | ---- | ------ | ----------- | ------------------------ | | 1 | `>` | `$a > $b` | 大于 | | 2 | `>=` | `$a >= $b` | 大于或等于 | | 3 | `<` | `$a < $b` | 小于 | | 4 | `<=` | `$a <= $b` | 小于或等于 | | 5 | `==` | `$a == $b` | 等于 (值相等即可) | | 6 | `===` | `$a == $b` | 全等于(二边值与类型全等) | | 7 | `!=` | `$a != $b` | 不相等 | | 8 | `!==` | `$a !== $b` | 不全等 | | 9 | `<=>` | `$a <=> $b` | 太空船`php7+` | - 比较运算符: 返回布尔值,常用于流程控制中(`if/while/for...`) - `<=>`: 也叫组合比较符, 例如`$a <=> $b`, 有三种返回结果 | 序号 | 运算 | 结果 | | ---- | --------- | -------------- | | 1 | `$a > $b` | 返回`>0`的整数 | | 2 | `$a < $b` | 返回`<0`的整数 | | 3 | `$a = $b` | 返回`=0`的整数 | 示例代码: `demo15.php` ```php // 比较运算符返回布尔值 var_dump(10 > 20); // `==`二边值类型不同时,会自动转换,值相等返回true var_dump('10' == 10); // `===`: 不发生转换,要求值与类型都相同才返回true var_dump('10' === 10); // 结果: bool(false) bool(true) bool(false) echo '<hr>'; # 太空船运算符 var_dump(10 <=> 20); var_dump(10 <=> 5); var_dump(10 <=> 10); // 结果: int(-1) int(1) int(0) ``` --- ## 5. 逻辑运算符 | 序号 | 运算符 | 示例 | 描述 | | ---- | ------ | ----------- | -------- | | 1 | `&&` | `$a && $b` | 逻辑与 | | 2 | `||` | `$a || $b` | 逻辑或 | | 3 | `!` | `!$a` | 逻辑非 | | 4 | `xor` | `$a xor $b` | 逻辑异或 | - 逻辑运算符二边表达式必须是布尔类型 - 对应别名: `&&` => `and`, `||` => `or`, `!` => `not` - 优先级: `!` > `&&` > `||` - 异或: 当二边表达式运算结果不相同时,结果为`true` 示例代码: `demo16.php` ```php error_reporting(E_ALL ^ E_NOTICE); // 逻辑运算符 // && 二边全为true,结果为true var_dump((3 < 4) && (5 > 8)); // && 二边只要有一个为true,结果为true var_dump((3 < 4) || (5 > 8)); // 当$name存在且值等admin时显示欢迎词 // 未定义的变量返回false if ($name && $name === 'admin') { echo '欢迎您'; } else { echo '未登录'; } ``` --- ## 6. 三元运算符 | 序号 | 运算符 | 示例 | 描述 | 场景 | | ---- | ------ | ---------- | ------------------------- | ---------- | | 1 | `?:` | `$a ?: $b` | 仅判断表达式`true/false` | 简化双分支 | | 2 | `??` | `$a ?? $b` | 判断变量存在且不为 `null` | 设置默认值 | - 其实`??`不算三元运算符: 准确讲应该是`NULL合并符` - `??`: 需要满足二个条件(1)变量存在(2)且值不为`null`,其实就是`isset()`的要求 示例代码: `demo17.php` ```php // ?: 简化双分支 $price = 1200; if ($price > 1000) { echo '太贵了'; } else { echo '真便宜'; } // 三元运算符 echo $price > 1000 ? '太贵了' : '真便宜'; echo '<hr>'; // ?? null合并运算符,返回表达式 // isset($a): 变量存在定义且值不为NULL, 才返回true echo isset($password) ? $password : 'root'; // 如果$pass变量存在且值不为null,则使用该变量,否则创建该变量并设置默认值 // $password = '123'; $password = $password ?? 'root'; echo $password; ``` --- ## 7. 错误屏蔽符 | 运算符 | 示例 | 描述 | 场景 | | ------ | --------- | ---------------- | ------------ | | `@` | `@(10/0)` | 屏蔽所有运行错误 | 线上生产环境 | 示例代码: `demo18.php` ```php // @错误屏蔽符, 也叫 错误抑制符 // @只对表达式有效 // 实际开发中, 应该将这些错误写到日志文件中 // 变量未定义错误 echo @$username; // INF: 无穷大 // echo @(10 / 0); @(10 / 0); // 语法错误等致命错误是无法屏蔽的 // @print_r($a) @include('hello.php'); ```