PHP变量参考拼图

时间:2014-11-12 07:56:44

标签: php reference

运行以下代码:

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

out put:

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);

out put:

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

我已重新分配$ a的值,为什么有 RECURSION 循环引用?

1 个答案:

答案 0 :(得分:3)

要删除参考,您需要致电unset。在unset $a = array('yes');仍然与$a绑定后,$b没有{{1}},它们仍然是引用。所以第二部分与第一部分具有相同的行为。

  

但请注意,数组内部的引用是可能的   危险的。使用a执行正常(不是通过引用)赋值   右侧的参考不会将左侧变为a   引用,但数组内的引用保留在这些正常情况下   分配。

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