PHP变量引用谜题

6
运行以下代码:
<?php
$a = array('yes');
$a[] = $a;
var_dump($a);

输出:
array(2) {
  [0]=>
  string(3) "yes"
  [1]=>
  array(1) {
    [0]=>
    string(3) "yes"
  }
}

运行以下代码:

<?php
$a = array('no');
$b = &$a;
$a[] = $b;
$a = array('yes');
$a[] = $a;
var_dump($a);

输出结果:

array(2) {
  [0]=>
  string(3) "yes"
  [1]=>
  array(2) {
    [0]=>
    string(3) "yes"
    [1]=>
    *RECURSION*
  }
}

我重新分配了 $a 的值,为什么会出现递归循环引用?


1
哇,stackoverflow上有趣的东西!:)。+1!!! - Jacek Kowalewski
1个回答

3
要删除引用,您需要调用unset。在$a = array('yes');之后没有使用unset$a仍然与$b绑定,并且它们仍然是引用。因此,第二部分的行为与第一部分相同。
但是请注意,数组内的引用可能会带来潜在危险。在右侧使用引用进行普通(非引用)赋值不会将左侧变成引用,但是数组内的引用在这些普通赋值中保留。 http://php.net/manual/en/language.references.whatdo.php

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接