1

在完成这段代码之前,我只是错误地测试了一下,发现它不会停止:

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

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

4

4 回答 4

5

我做了一个简单的测试:

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

结果 :

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

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

$var.$i = "任何"; 不是很正确,我不知道您要做什么,但是如果您想填充和排列,您应该做更多类似的事情:

$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
    }
于 2013-07-25T11:08:33.723 回答
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。

于 2013-07-25T11:12:36.990 回答
1

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

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

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

于 2013-07-25T11:03:09.340 回答
0

PHP5.4+。

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

试试这个:

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

你的循环会起作用。$var 将获得“任何东西”的价值。这看起来不像是一个错误。只是某人的意外行为。

于 2013-07-26T09:55:18.917 回答