2015-05-01 135 views
3

作为每下面的PHP代码,输出是通过引用传递分配PHP

1 . 1 
2 . 2 
3 . 3 

我明白& $裁判通过引用传递。但是在每次'row'更改值时,它的位置($ row = & $ ref;)随处可见,'ref'与'row'的值相同。真的很混乱。看起来像那样=不仅将正确的值分配给左侧。有人可以验证这一点吗?

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

也许对你有兴趣:http://stackoverflow.com/q/10057671/3933332 – Rizier123

回答

1

没有钻研的technical details太多,这里的基本思路是,你已经$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有时会自动为你引用传递。例如,如果您实例化一个类并将该实例注入到函数中,它将自动通过引用传递。

1

当你$row = &$ref;

这意味着:变量的内容与另一名相同。也就是说,相同,不是副本。你在$ref中做什么,它将在$row中做出,反之亦然。