PHP变量参考拼图

Nol*_*yde 6 php reference

运行以下代码:

<?php
$a = array('yes');
$a[] = $a;
var_dump($a);
Run Code Online (Sandbox Code Playgroud)

出局:

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

运行以下代码:

<?php
$a = array('no');
$b = &$a;
$a[] = $b;
$a = array('yes');
$a[] = $a;
var_dump($a);
Run Code Online (Sandbox Code Playgroud)

出局:

array(2) {
  [0]=>
  string(3) "yes"
  [1]=>
  array(2) {
    [0]=>
    string(3) "yes"
    [1]=>
    *RECURSION*
  }
}
Run Code Online (Sandbox Code Playgroud)

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

sec*_*tus 3

要删除引用,您需要调用unset. 没有unsetafter$a = array('yes'); $a仍然与 with 绑定,$b并且它们仍然是引用。所以第二部分的行为与第一部分相同。

但请注意,数组内的引用存在潜在危险。对右侧的引用进行正常(非通过引用)赋值不会将左侧变成引用,但数组内的引用会保留在这些正常赋值中。

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