Php 按引用传递赋值

Php 按引用传递赋值,php,Php,根据下面的php代码,输出为 1 . 1 2 . 2 3 . 3 我理解&$ref是通过引用传递的。但在赋值($row=&$ref;)之后,只要“row”改变值,“ref”也会改变为与“row”相同的值。真让人困惑。似乎=不仅仅是将右值分配给左值。有人能核实一下吗 <?php $ref = 0; $row = &$ref; foreach (array(1, 2, 3) as $row) { print "$row . $ref \n" ; } echo $ref;

根据下面的php代码,输出为

1 . 1 
2 . 2 
3 . 3 
我理解&$ref是通过引用传递的。但在赋值($row=&$ref;)之后,只要“row”改变值,“ref”也会改变为与“row”相同的值。真让人困惑。似乎=不仅仅是将右值分配给左值。有人能核实一下吗

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

在不深入研究太多的情况下,这里的基本思想是将
$ref
作为对
$row
的引用。具体来说,
$row
位于某个内存地址。如果你做一个简单的作业

$ref = $row;
然后,
$ref
$row
副本。如果你改变一个,它不会改变另一个

$row = &$ref;
$ref
现在指向
$row
。因此,它们本质上是同一个变量。它们指向同一个内存位置(过于简化,因此您可以理解)

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

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

function modVal(Array &$arr) {
    $arr[2] = '9';
}
modVal($data);
var_dump($data);
产生

array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "9"
}
但是,从函数声明中删除
&
,输出变为

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

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

当您执行
$row=&$ref

它的意思是:相同的变量内容有另一个名称。就是一样,不是拷贝。您在
$ref
中执行的操作将在
$row
中执行。。。反之亦然。

也许你会感兴趣: