PHP中While循环条件的异常行为咨询:两段循环代码的差异及死循环原因解析
PHP两段While循环的差异解析:为何一个正常结束,一个无限循环?
咱们来唠唠这两段PHP循环代码的区别,为啥一个能正常跑完,另一个却死循环停不下来?其实根源就在变量赋值的小细节里!
对比代码展示
第一段(可正常结束的循环)
$i = 0; while ($i < 10) { $i++; }
第二段(陷入无限循环的代码)
$i = 0; $q = $i; while ($q < 10) { $i++; }
核心原因拆解
第一段代码的逻辑很直接:循环的判断条件是基于变量
$i本身,每次循环里执行$i++都会让$i的数值不断递增,当$i达到10时,$i < 10的条件不成立,循环就会正常终止。第二段代码的问题出在
$q = $i这一步:在PHP中,整数这类基础数据类型的赋值是值传递,简单说就是$q只是复制了$i当时的数值(也就是0),之后$i不管怎么自增,都和$q没有半毛钱关系。而循环的判断条件是$q < 10,但整个循环过程中$q的值始终是0,永远满足小于10的条件,可不就陷入无限循环了嘛!
如果想让第二段代码和第一段有一样的效果,你需要把$q改成$i的引用,也就是写成$q = &$i;(注意这里的&符号),这样$q就会和$i指向同一个内存地址,$i自增的时候$q的值也会跟着同步变化,循环就能正常结束了。
内容的提问来源于stack exchange,提问作者dvd
相关产品推荐
相关产品推荐

