php运算符有哪些类型_php运算符类型详解【基础】

8次阅读

php运算符按行为分4类:算术、比较、逻辑赋值、位运算;用错易致notice或逻辑错误,因隐式类型转换规则反直觉且不报错。

php运算符有哪些类型_php运算符类型详解【基础】

PHP 运算符不是“类型越多越好”,而是按行为分 4 类,用错一类就容易出 Notice 或逻辑翻车。

算术运算符:别在字符串里直接用 +

PHP 会自动转换类型,但转换规则反直觉:"1" + "2"3"1a" + "2b" 却得 3(因为从左截取数字直到非数字),而 "a1" + "b2"0(开头非数字,转成 0)。

  • ++-- 对未定义变量会触发 Notice: undefined variable,先初始化再用
  • % 取模要求两边都是整数,5.5 % 2 会静默转成 5 % 2,结果是 1,不是你想的浮点余数
  • 除法 / 永远返回 Float,哪怕 4 / 2 也是 2.0,要整除用 intdiv(4, 2)

比较运算符===== 的坑比想象中深

松散比较 == 会触发类型转换,0 == false"0" == false"" == 0 全为 true,但 "0" == ""false —— 转换优先级不一致。

  • 数组比较只看键值对是否完全相同,===== 行为一致;但对象== 比较属性,=== 还要求是同一实例
  • (飞船运算符)返回 -1/0/1,可用于 usort(),但注意它对 NULLNaN 等有特殊规则,比如 NaN 00(PHP 认为 NaN 不可比较,不报错也不警告)
  • 字符串比较用 strcmp() 更安全,== 遇到数字开头的字符串会转成数字比,"1e3" == "1000" 居然是 true

逻辑与赋值组合:别以为 &&and 只是写法不同

它们优先级差很多:&& 优先级高于 =and 低于 =。写 $a = true && false,结果是 $a = (true && false) → false;但 $a = true and false 等价于 ($a = true) and false$atrue,表达式整体为 false

立即学习PHP免费学习笔记(深入)”;

  • 短路求值靠谱,但别依赖副作用:doA() || doB() 中,doB()doA() 返回真时不执行,但如果 doA() 有输出或修改全局状态,换成 |(位或)就全执行了
  • ??(空合并)只检测 null,不检测 false0""?:(三元空操作)才检测“falsy”,$x ?: 'default'$x = 0 时返回 'default',而 $x ?? 'default' 返回 0
  • ??? 不存在,别手滑多打一个问号

位运算符:整数边界和符号位经常被忽略

PHP 的整数是有符号的,32 位系统上 0x7FFFFFFF 是最大正整数,再加 1 就变负数。位移操作 和 <code>>> 对负数右移会补符号位,不是补 0。

  • ~ 按位取反后,结果是带符号整数,~0 在 64 位系统上是 -1(所有位为 1),不是 0xFFFFFFFFFFFFFFFF 字面量
  • & 判断标志位时,确保掩码是整数:if ($flags & "READ") 会把字符串转成 0,永远假;要用 if ($flags & FLAG_READ)常量
  • ^ 异或可用于交换两个变量(不用临时变量),但仅限同类型且非引用:$a ^= $b ^= $a ^= $b 在 PHP 7.4+ 因赋值顺序变化已不可靠,别用

最麻烦的不是记不住运算符,是 PHP 在隐式转换时既不报错也不提示——==+empty() 这些地方,看似运行正常,实则埋着逻辑雪崩的引信。

text=ZqhQzanResources