PHP中IF语句内的前置自增(++$x)无效果,原因是什么?
为什么这段PHP代码里的IF语句前置自增没效果?
这段代码的行为和你使用的PHP版本直接相关,核心问题出在同一个表达式里对同一个变量同时读和写时,不同PHP版本的求值顺序不一样:
要是用的PHP 5或更早版本,表达式是从右往左求值的。碰到
$x < ++$x时,会先执行右边的++$x,把$x从10改成11,再取左边$x的值(已经是11了)。最后比较11 < 11,结果为false,自然不会输出Hello World。换成PHP 7及以后版本,求值顺序改成从左往右了。先取左边
$x的初始值10,再执行右边的++$x把$x改成11,这时候比较10 < 11,结果为true,就会输出内容。
另外要提醒一句:这种在同一个表达式里对变量既读又写的写法非常不推荐,不同语言甚至同语言不同版本的行为都可能不一致,很容易埋坑。如果要实现类似逻辑,最好拆分步骤,比如:
<?php $x = 10; $originalX = $x; ++$x; if($originalX < $x) { echo "Hello World"; } ?>
这样不管用哪个PHP版本,结果都一致,代码也更好懂。
内容的提问来源于stack exchange,提问作者Amir Iqbal
相关产品推荐
相关产品推荐

