前置递增(++$a)先加1再参与运算,后置($a++)先用原值再加1;对非数字类型递增有特殊规则,如字符串按字面量递增、布尔和null行为异常,易引发逻辑错误。

递增递减运算符在前和在后,结果真不一样
前置(++$a、--$a)和后置($a++、$a--)不是“写法偏好”,而是语义差异:前者先改值再参与表达式,后者先用原值再改值。
- 写
$b = $a++,$b得到的是旧值,$a才加 1 - 写
$b = ++$a,$a先加 1,$b拿到的是新值 - 在
for循环里用$i++或++$i效果一样,但涉及赋值或函数参数时就容易出错 - 比如
echo $a++ . ',' . ++$a,输出可能不是你直觉想的“0,2”,而是 “0,2” 或 “0,1”——取决于 PHP 版本和优化行为,别依赖它
对布尔值和 NULL 用递增递减,小心意外结果
PHP 对非数字类型做递增/递减有隐式转换规则,但不是所有类型都“安全”。
-
true++→ 还是true(不变);false++→ 变成1(转为整数后加 1) -
null++→ 无效果,仍为null;null++后再 echo 是空,但null++单独执行不报错也不变 -
null++看似没用,但null++在 if 判断中可能触发静默转换,导致逻辑偏移 - 字符串如
$s = 'a'; $s++会变成'b',这是 PHP 特有的字面量递增,但'z'++→'aa','9'++→'10',不是数值加法
算术上下文里字符串自动转 0,递增却不会这样处理
很多人以为 $a = 'abc'; $a++ 和 $a + 1 行为一致,其实完全不同。
-
$a = 'abc'; echo $a + 1;→ 输出1(字符串转整数失败 → 0,再加 1) -
$a = 'abc'; echo $a++;→ 输出'abc',然后$a变成'abd'?不,实际是'abc'→'abd'?错:PHP 对无法识别的字符串递增,结果仍是原字符串(不报错,也不变) - 只有纯字母或纯数字字符串才按规则递增;
'123'++ →'124',但'123abc'++ → 还是'123abc' - 这种“看似动了实则没动”的行为,在循环计数或状态判断中极易埋雷
在 for 循环里用 $i++ 还是 ++$i?性能差多少?
结论:现代 PHP(7.4+)下,二者性能几乎无差别,但语义清晰度更重要。
立即学习“PHP免费学习笔记(深入)”;
- PHP 解释器对简单自增做了优化,
$i++和++$i在循环变量更新位置时,底层指令基本一致 - 真正影响可读性的是:如果你在循环体里还用了
$i的值,用++$i就可能提前改变它,造成逻辑错位 - 标准写法
for ($i = 0; $i 是约定俗成,换 <code>++$i不会快,反而让同行 review 时多想半秒 - 唯一建议换前置的场景:你在函数调用里直接传递增值,比如
doSomething(++$counter),明确表示“这次调用就要用新值”
$a++ 和 ++$a 的区别,往往不是“少一多一”,而是“走对路还是进死胡同”。











