Php 按引用传递赋值
根据下面的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;
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
中执行。。。反之亦然。也许你会感兴趣: