在完成这段代码之前,我只是错误地测试了一下,发现它不会停止:
$var = "any";
for ($i=1; $i < 2; $i++){
$var.$i = "any";
}
为什么这会产生无限循环?为什么 PHP 不会产生错误?
在完成这段代码之前,我只是错误地测试了一下,发现它不会停止:
$var = "any";
for ($i=1; $i < 2; $i++){
$var.$i = "any";
}
为什么这会产生无限循环?为什么 PHP 不会产生错误?
我做了一个简单的测试:
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
}
当您执行以下操作时,$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。
这是不正确的$var.$i = "any";
,因为这个表达式等价于:
$var.($i = "any");
分配$i
给新值,因此 while 循环检查的条件将始终为真。
PHP5.4+。
在 $i++ 之后,当 $i == 'any' 时,您将得到 'anz' 结果。$i == 'any',在赋值之后,实际上,它应该得到什么。技巧在 "$i='any'" 行的一部分。即使“=”的优先级低于“.”,你为什么认为它不应该在$i中放入'any'?
试试这个:
$var = "any";
for ($i=1; $i < 2; $i++){
$i.$var = "anything";
}
你的循环会起作用。$var 将获得“任何东西”的价值。这看起来不像是一个错误。只是某人的意外行为。