Ampersand前置在数组var_dump的末尾

Pep*_*ijn 10 php pointers reference

我写了一段教程代码,运行后发现了一些非常奇怪的东西.

我的Chrome扩展程序Var Dumpling没有看到数组中的最后一个条目,因为附加了该符号类型的&符号.

我测试了这段代码:

$alphabet = array('a', 'b', 'c');

foreach ($alphabet as &$letter) {
  $letter .= 'a';
}

var_dump($alphabet);
Run Code Online (Sandbox Code Playgroud)

var_dump的结果是:

array(3) {
  [0]=>
  string(2) "aa"
  [1]=>
  string(2) "ba"
  [2]=>
  &string(2) "ca"
}
Run Code Online (Sandbox Code Playgroud)

您可以看到最后一个条目&string(2) "ca"而不是我期望的条目string(2) "ca".在这个逻辑部分没有问题,我可以调用$alphabet[2]它,它将返回最后一个条目的值ca.

我想知道的是,这个约定或PHP中的一些奇怪的hickup?

ToB*_*oBe 11

这表示变量作为参考并且完全有效.在大多数情况下,只需忽略它并继续.

在这种特殊情况下,它可能意味着仍然从foreach循环引用数组的最后一个元素.由于你在那里使用它作为参考,并且循环关闭后循环中的最后一项仍然存在,该项目的引用仍然存在.或者简而言之:

循环之后,$ letter仍然是$ alphabet [2]的引用.如果你unset($letter),那个&符应该消失.

http://php.net/manual/en/language.references.php