PHP运算符易出错的主因是优先级、隐式类型转换及==与===混用;%仅支持整数、/总返回float、除零返回INF/NAN;比较首选===;??只判null,位运算需注意优先级和平台差异。

PHP 运算符本身不难,但初学者常卡在「为什么结果不是我预期的」——问题往往出在优先级、类型隐式转换、或 == 和 === 混用上。
算术运算符:加减乘除模,注意浮点精度和除零
PHP 的 +、-、*、/、% 行为接近其他语言,但有两个实际坑点:
-
%只支持整数操作数,若传入浮点数(如10.5 % 3),PHP 会先截断为整数(变成10 % 3),不报错但易误判 -
/永远返回 float 类型,哪怕结果是整数(6 / 2得3.0,不是3);想取整用intdiv(6, 2)或(int)(6 / 2) - 除零不抛异常,而是触发 warning 并返回
INF、-INF或NAN,需用is_infinite()或isnan()主动检查
比较运算符:别再无脑用 ==,=== 才是日常首选
这是初学者最常翻车的地方。PHP 的松散比较 == 会自动类型转换,导致诡异结果:
$a = 0; $b = ''; $c = '0'; var_dump($a == $b); // true(int 0 == string '' → 都转成 0) var_dump($a == $c); // true(int 0 == string '0' → string '0' 转成 int 0) var_dump($a === $c); // false(类型不同,绝不相等)
除非你明确需要类型宽松比较(比如表单提交的字符串数字与数据库 int 字段比对且已确认安全),否则一律用 === 和 !==。另外注意:
立即学习“PHP免费学习笔记(深入)”;
PHP网络编程技术详解由浅入深,全面、系统地介绍了PHP开发技术,并提供了大量实例,供读者实战演练。另外,笔者专门为本书录制了相应的配套教学视频,以帮助读者更好地学习本书内容。这些视频和书中的实例源代码一起收录于配书光盘中。本书共分4篇。第1篇是PHP准备篇,介绍了PHP的优势、开发环境及安装;第2篇是PHP基础篇,介绍了PHP中的常量与变量、运算符与表达式、流程控制以及函数;第3篇是进阶篇,介绍
-
(宇航员运算符)用于安全排序,返回 -1/0/1,避免strcmp()或手动写 if 判断 -
??是空合并运算符,只检测null或未定义,不检测空字符串、0、false—— 想判断“假值”用?:
逻辑与赋值组合:别写 $a = $a + 1,用 += 和 ++,但分清前后置
复合赋值(+=、-=、.= 等)简洁安全,推荐使用。自增/自减要注意:
-
$i++(后置):先返回当前值,再加 1;++$i(前置):先加 1,再返回新值 - 用在表达式里差别明显:
echo $i++;和echo ++$i;输出不同,循环中多数情况用$i++即可,无需强行前置 -
.=是字符串拼接专用,比$s = $s . 'abc'效率高且可读性好
位运算符:初学者可暂时跳过,但遇到权限系统时绕不开
像 &、|、^、、>> 这些,在普通业务逻辑里极少出现。但一旦接触用户权限(如 RBAC 中用整数位表示多个权限)、文件系统操作(chmod 参数)、或底层数据处理,就必须懂:
-
$flags & FLAG_READ判断是否含读权限(按位与) -
$flags |= FLAG_WRITE增加写权限(按位或赋值) - 所有操作数会被转为有符号整数,超大数值可能因平台(32/64 位)表现不同,生产环境建议用
gmp扩展处理大位运算
真正容易被忽略的是:运算符优先级比你想的更低,& 甚至低于 ==,所以 $a & $b == $c 实际等价于 $a & ($b == $c) —— 必须加括号:($a & $b) == $c。










