【问题标题】:Ampersand prepended at end of array var_dump在数组 var_dump 末尾添加与号
【发布时间】:2014-10-21 11:22:03
【问题描述】:

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

我的 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 中的一些奇怪的小插曲?

【问题讨论】:

    标签: php pointers reference


    【解决方案1】:

    这表示一个变量是一个 Reference 并且是完全有效的。在大多数情况下,只需忽略它并继续。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 2021-02-07
      • 2015-04-17
      • 2020-02-24
      • 2017-04-28
      • 2017-09-02
      • 2021-04-24
      相关资源
      最近更新 更多