3、运算符与表达式:算术运算符、赋值运算符、比较运算符、逻辑运算符、字符串运算符、错误控制运算符、三元运算符
运算符这东西,说白了就是让数据「动起来」的工具。我刚开始学PHP时,总觉得运算符就是加减乘除,后来才发现——嗯,它远比我想象的丰富。今天咱们就把PHP里最常用的几类运算符捋一遍。
3.1 算术运算符:最基础的数学活儿
算术运算符就是咱们小学就认识的加减乘除。在PHP里,它们长这样:
$a = 10;
$b = 3;
echo $a + $b; // 13
echo $a - $b; // 7
echo $a * $b; // 30
echo $a / $b; // 3.3333333333333
echo $a % $b; // 1(取余数)
echo $a ** $b; // 1000(10的3次方)
这里有个坑,我踩过好几次——除法运算的结果可能是浮点数。比如10/3,结果不是3,而是3.333...。如果你想要整数结果,得用intdiv()函数。
3.2 赋值运算符:不只是等号
很多人以为赋值就是「=」,其实PHP提供了很多「偷懒」的写法。我个人习惯用复合赋值运算符,代码写起来快很多。
$x = 10;
$x += 5; // 等价于 $x = $x + 5,结果是15
$x -= 3; // 12
$x *= 2; // 24
$x /= 4; // 6
$x %= 3; // 0
$x .= 'abc'; // 字符串拼接赋值,等价于 $x = $x . 'abc'
你想想看,每次写 $x = $x + 5 多啰嗦。用 += 一行搞定,代码也更清爽。
3.3 比较运算符:判断的核心
比较运算符返回布尔值——true或false。这里有个经典问题:== 和 === 有什么区别?
| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
| == | 等于(只比较值) | 5 == "5" | true |
| === | 全等于(比较值和类型) | 5 === "5" | false |
| != | 不等于 | 5 != "5" | false |
| !== | 不全等于 | 5 !== "5" | true |
| < | 小于 | 3 < 5 | true |
| > | 大于 | 3 > 5 | false |
我曾经在项目中犯过一个低级错误——用 == 判断用户输入的密码是否和数据库里的一致。结果用户输入"0"居然通过了验证,因为数据库里存的是空字符串,而空字符串 == 0 是true。从那以后,我所有比较都用 ===,再也没出过这种问题。
3.4 逻辑运算符:组合条件
逻辑运算符用来组合多个条件判断。常用的有三个:
$age = 25;
$hasID = true;
// &&(与):两个条件都成立才为true
if ($age >= 18 && $hasID) {
echo "可以进入";
}
// ||(或):只要一个条件成立就为true
if ($age < 12 || $age > 60) {
echo "享受优惠";
}
// !(非):取反
if (!$hasID) {
echo "请出示证件";
}
这里有个性能小技巧——短路求值。比如用 && 时,如果第一个条件已经是false,PHP就不会再判断第二个条件了。我写代码时,习惯把计算量小的条件放前面,能省点性能。
3.5 字符串运算符:拼接的艺术
PHP里拼接字符串用点号(.),不是加号。很多从其他语言转过来的朋友容易搞混。
$firstName = "张";
$lastName = "三";
$fullName = $firstName . $lastName; // "张三"
// 也可以用 .= 复合赋值
$greeting = "你好,";
$greeting .= $fullName; // "你好,张三"
echo $greeting;
嗯,这里要注意——点号两边如果有数字,PHP会自动转成字符串。比如 "年龄:" . 25 结果是 "年龄:25",挺方便的。
3.6 错误控制运算符:@符号的妙用
这个运算符挺特别的——就是一个@符号。把它放在表达式前面,可以抑制错误信息输出。
// 假设文件不存在
$content = @file_get_contents("不存在的文件.txt");
if ($content === false) {
echo "文件读取失败,但不会显示警告信息";
}
3.7 三元运算符:简洁的条件判断
三元运算符是if-else的简写形式。语法是:条件 ? 真值 : 假值
$age = 20;
$status = ($age >= 18) ? "成年" : "未成年";
echo $status; // "成年"
// 也可以嵌套使用,但我不建议
$score = 85;
$grade = ($score >= 90) ? "优秀" : (($score >= 60) ? "及格" : "不及格");
echo $grade; // "及格"
我个人习惯用三元运算符处理简单的二选一场景。一旦逻辑复杂了,还是老老实实写if-else吧——代码是给人读的,不是用来炫技的。
好了,运算符这块就聊到这儿。说白了,运算符就是PHP的「动词」,让数据产生各种变化。多写多练,慢慢就熟练了。下一章咱们聊聊流程控制——if、switch、循环这些,到时候见。