PHP中$val['id'] = $val['id']++与+1、单独++结果不同原因求解
问题原因分析
核心是PHP后置递增运算符的运算逻辑特性
PHP中**后置++**的执行顺序规则是:
- 第一步:先返回变量的当前原始值作为整个表达式的结果
- 第二步:再对变量本身执行+1操作
你写$val['id'] = $val['id']++时,完整执行流程如下(以$val['id']初始值为0举例):
- 计算等号右侧的
$val['id']++表达式:先返回原始值0,然后将$val['id']的值更新为1 - 执行赋值操作:把右侧表达式返回的
0重新赋值给$val['id'],直接覆盖了上一步刚更新的1 - 最终
$val['id']的值仍然是初始的0,没有实现+1效果
而另外两种写法都能正常实现+1:
- 单独写
$val['id']++:没有多余的赋值操作,第二步+1后的结果会直接保留 - 写
$val['id'] = $val['id'] + 1:先计算$val['id'] +1得到新值,再把新值赋值回去,不存在旧值覆盖的问题
你可以用极简代码验证这个逻辑:
$a = 0; $a = $a++; var_dump($a); // 输出 int(0)
这个结果和你是否使用foreach的引用遍历没有关系,是后置++本身的运算规则决定的。
内容的提问来源于stack exchange,提问作者user6228017
相关产品推荐
相关产品推荐

