第10课:PHP 运算符实战指南:从基础运算到条件逻辑(PHP教程 PHP入门实战教程 黄菊华PHP网站开发系列教程)
1. PHP运算符入门从计算器到编程思维刚开始学PHP的时候我总把运算符当成计算器功能键的翻版。直到有次尝试写一个商品折扣计算功能才发现运算符的组合能产生奇妙的化学反应。比如这个简单的例子$price 100; $discount 0.8; $finalPrice $price * $discount; // 打8折算术运算符就像数学课上的老朋友但它们在编程中有更多玩法。比如用取模运算符%判断奇偶性$number 7; if ($number % 2 0) { echo 偶数; } else { echo 奇数; // 输出这个 }新手常犯的错误是混淆/和%。记得去年带实习生时他死活算不出15除以4的整数部分结果发现他用的是15 % 4得到余数3实际应该用intdiv(15, 4)或(int)(15 / 4)。2. 赋值运算符的隐藏技能大多数教程只教但组合赋值运算符才是效率利器。比如要给变量累加值// 新手写法 $total $total $price; // 老手写法 $total $price; // 简洁又高效我在处理购物车结算时发现组合运算符还能链式使用$a $b $c 10; // 三个变量都赋值为10但要注意一个坑PHP的赋值是传值而非传引用。有次我这样写$original 5; $copy $original; $copy 10; echo $original; // 还是5不是10如果需要引用赋值要用符号$original 5; $ref $original; $ref 10; echo $original; // 现在变成10了3. 比较运算符的类型陷阱刚入门时我花了三天才搞明白和的区别。看这个典型例子100 100; // true值相同 100 100; // false类型不同实际项目中表单数据验证尤其要注意这点。比如// 从表单获取的年龄 $age 25; if ($age 25) { // 这里会成立 echo 允许进入; } if ($age 25) { // 这里不成立 echo 这里不会执行; }建议养成使用严格比较的习惯我在用户权限系统里吃过类型转换的亏。PHP8.0引入的太空船运算符也很有意思echo 5 3; // 输出1左边大 echo 3 5; // 输出-1右边大 echo 3 3; // 输出0相等4. 逻辑运算符的实战技巧处理多条件判断时逻辑运算符能大幅简化代码。比如用户登录验证$isAdmin true; $isLoggedIn false; if ($isLoggedIn $isAdmin) { echo 进入管理后台; } elseif ($isLoggedIn || $isAdmin) { echo 部分权限; } else { echo 请先登录; }但要注意和and的优先级差异。有次我这样写$result false true; // $result是false $result false and true; // $result还是false但整个表达式是true在权限系统中我常用xor异或来做互斥条件判断$hasRead true; $hasWrite false; if ($hasRead xor $hasWrite) { echo 权限校验通过; // 会执行 }5. 表单验证综合案例现在我们把运算符组合起来处理一个用户注册表单$username $_POST[username] ?? ; $password $_POST[password] ?? ; $confirm $_POST[confirm] ?? ; $age (int)($_POST[age] ?? 0); // 验证逻辑 $isValid ( strlen($username) 6 strlen($password) 8 $password $confirm $age 18 ); if ($isValid) { echo 注册成功; } else { if (strlen($username) 6) echo 用户名太短; if (strlen($password) 8) echo 密码强度不足; if ($password ! $confirm) echo 两次密码不一致; if ($age 18) echo 需年满18岁; }这个案例融合了空合并运算符??处理未提交字段比较运算符验证长度和匹配逻辑运算符组合多个条件类型转换确保年龄是数字6. 运算符优先级避坑指南PHP运算符有超过20种优先级级别。我曾掉进这个坑$result true false; // $result是false $result true and false; // $result是true建议复杂表达式多用括号明确优先级记住常见优先级||andor遇到疑惑时拆分成多行代码更安全比如计算折扣时// 容易出错的写法 $price 100 50 * 0.8; // 结果是140 // 明确优先级的写法 $price 100 (50 * 0.8); // 还是140 $price (100 50) * 0.8; // 变成1207. 特殊运算符的妙用三元运算符让代码更简洁。处理分页时我常这样用$page isset($_GET[page]) ? (int)$_GET[page] : 1;PHP7的??空合并运算符更便捷// 旧写法 $username isset($_GET[user]) ? $_GET[user] : guest; // 新写法 $username $_GET[user] ?? guest;字符串运算符.在生成HTML时特别有用$class active; $html div class . $class . 内容/div;但大量拼接时建议用模板字符串或HEREDOC语法更高效。8. 最佳实践与性能优化经过多年实践我总结出这些经验能用就别用 $a $b前者更快比较字符串用比性能更好避免在循环中进行重复运算// 不好的写法 for ($i 0; $i count($array); $i) {} // 好的写法 $count count($array); for ($i 0; $i $count; $i) {}使用合适的运算符可以避免不必要的函数调用比如用$a ?? $b替代isset($a) ? $a : $b