我编写了一段教程代码,运行后遇到了一些非常奇怪的东西。
我的Chrome扩展程序Var Dumpling没有看到数组中的最后一个条目,因为&符号已附加到值的类型。
我测试了这段代码:
$alphabet = array('a', 'b', 'c');
foreach ($alphabet as &$letter) {
$letter .= 'a';
}
var_dump($alphabet);
var_dump的结果是:
array(3) {
[0]=>
string(2) "aa"
[1]=>
string(2) "ba"
[2]=>
&string(2) "ca"
}
您可以看到最后一个条目是&string(2) "ca"
,而不是我期望的string(2) "ca"
。在逻辑部分没有问题,我可以调用$alphabet[2]
,它将返回最后一个条目ca
的值。
我想知道的是,这个约定还是PHP中的一些奇怪的hickup?
答案 0 :(得分:10)
这表示变量为 参考 ,并且完全有效。在大多数情况下,只需忽略它并继续。
在这种特殊情况下,它可能意味着仍然从foreach循环引用数组的最后一个元素。由于你在那里使用它作为参考,并且循环结束后循环中的最后一项仍然存在,该项目的引用仍然存在。 或者简而言之:
循环之后,$ letter仍然是对$ alphabet [2]的引用。
如果你unset($letter)
,那个&符应该消失。