通过引用分配php传递

use*_*130 5 php

根据下面的PHP代码,输出是

1 . 1 
2 . 2 
3 . 3 
Run Code Online (Sandbox Code Playgroud)

我理解&$ ref是通过引用传递的.但是就像赋值($ row =&$ ref;)之后,只要'row'改变了值,'ref'就会变成与'row'相同的值.真的很混乱.似乎=不仅仅是向左分配正确的值.有人可以验证一下吗?

<?php
$ref = 0;
$row = &$ref;
foreach (array(1, 2, 3) as $row) {
    print "$row . $ref \n" ;
}
echo $ref; 
?>
Run Code Online (Sandbox Code Playgroud)

Mac*_*ity 1

无需过多深入研究技术细节$ref,这里的基本思想是您已经参考了$row. 具体来说,$row位于某个内存地址。如果你做一个简单的作业

$ref = $row;
Run Code Online (Sandbox Code Playgroud)

然后$ref是的副本$row。如果你改变一个,就不会改变另一个

$row = &$ref;
Run Code Online (Sandbox Code Playgroud)

$ref现在指向$row. 所以它们本质上是相同的变量。它们指向相同的内存位置(过于简单化,所以你明白了)。

最常见的用途是您需要向函数中注入一些值。

$data = ['1', '2', '3'];

function modVal(Array &$arr) {
    $arr[2] = '9';
}
modVal($data);
var_dump($data);
Run Code Online (Sandbox Code Playgroud)

生产

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

但是,从函数声明中删除&,输出变为

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

PHP 有时会自动为您传递引用。例如,如果您实例化一个类并将该实例注入到函数中,它将自动通过引用传递。