在完成此代码之前,我只是错误地测试了它,并意识到它不会停止:
$var = "any";
for ($i=1; $i < 2; $i++){
$var.$i = "any";
}
为什么会产生无限循环?为什么PHP不会产生错误?
答案 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。对某人来说只是出乎意料的行为。