为什么这段代码是无限循环?

时间:2013-07-25 10:59:45

标签: php while-loop infinite-loop

在完成此代码之前,我只是错误地测试了它,并意识到它不会停止:

$var = "any"; 
for ($i=1; $i < 2; $i++){ 
    $var.$i = "any"; 
}

为什么会产生无限循环?为什么PHP不会产生错误?

4 个答案:

答案 0 :(得分:5)

我做了一个简单的测试:

echo $i;
 $var.$i = "any";
var_dump($var);

结果:

1string(3) "any"
anzstring(3) "any"

所以$ i被转换为“anz”并且没有通过验证来退出循环。

$ var。$ i =“any”;是不是真的正确,我不知道你想要做什么,但如果你想填补和阵列你应该做更多的事情:

$var = array();
for ($i=1; $i < 2; $i++){ 
 $var[] = "any";
}

如果您想逐字母更改字符串:

$var = "any";
    for ($i=1; $i < 2; $i++){ 
     $var[$i] = "a"; // asign a new letter to the string at the $i position
    }

答案 1 :(得分:2)

执行以下$var.$i = 'any'时,您需要设置$i变量和$var变量。 因此,循环永远不会停止运行,因为var_dump($i < 1)返回true。

$var = 'var';
$i = 1;
$var.$i = 'var';

var_dump($i); 

返回string(3) "var"

此循环永远不会停止,因为$ i总是重置为'var',小于1。

答案 2 :(得分:1)

这是不正确的$var.$i = "any";,因为此表达式等同于:

 $var.($i = "any");

$i分配给新值,因此while循环检查的条件将始终为真。

答案 3 :(得分:0)

PHP5.4 +。

在$ i ++之后,当$ i =='any'时,你会得到'anz'结果。 $ i =='any',在分配之后,实际上,它应该得到什么。 Trick在“$ i ='any'”行的一部分。即使“=”的优先级低于“。”,为什么你认为它不应该在$ i中放入“any”?

请改为尝试:

$var = "any"; 
for ($i=1; $i < 2; $i++){ 
 $i.$var = "anything";
}

你的循环会起作用。 $ var将获得“任何”价值。这看起来不像是一个bug。对某人来说只是出乎意料的行为。