Ampersand前置在数组var_dump的末尾

时间:2014-10-21 11:22:04

标签: php pointers reference

我编写了一段教程代码,运行后遇到了一些非常奇怪的东西。

我的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?

1 个答案:

答案 0 :(得分:10)

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

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

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

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