2012-01-07 41 views

回答

8

这意味着它通过引用传递而不是值... IE对变量的任何操作都会影响原始。这与任何修改不影响原始对象的值不同。

这是问了很多次的计算器。

+1

要添加,“通过引用”意味着它指的是该变量的相同分配的内存块被称为 – Prof83 2012-01-07 11:27:09

+1

为反对“按价值”,这意味着变量的副本是由PHP在新的内存块中创建的。 – Kaii 2012-01-07 11:34:14

+0

有的基准是如何在问题的示例代码传递两种方式,[I概述了两个](http://stackoverflow.com/a/8769347/367456)。 – hakre 2012-01-07 11:37:07

4

它是用来在数组的单个实例更改应用到主阵列..

由于:

//现在的变化不会影响阵列$ wishesarray

foreach ($wishesarray as $id => $categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll same as before.. 

,但现在改变将在数组$ wishesarray反映也

foreach ($wishesarray as $id => &$categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll have values all increased by one.. 
36

这个例子会告诉你区别

$array = array(1, 2); 
foreach ($array as $value) { 
    $value++; 
} 
print_r($array); // 1, 2 because we iterated over copy of value 

foreach ($array as &$value) { 
    $value++; 
} 
print_r($array); // 2, 3 because we iterated over references to actual values of array 

退房为此这里的PHP文档:http://pl.php.net/manual/en/control-structures.foreach.php

+0

不将_by reference_语法往往造成像错误:“不能创建从字符串偏移/引用”? – 2017-07-19 08:57:46

1

对于你的问题的代码,有可能是因为给予内foreach循环是空的没有明确的答案。

我用你的代码是看到,内foreach遍历一个参考,而不是常见的方式是什么。

我建议你把foreach PHP Manual page的读,它涵盖了所有四种情况:

foreach($standard as $each); 

foreach($standard as &$each); # this is used in your question 

$reference = &$standard; 
foreach($reference as $each); 

$reference = &$standard; 
foreach($reference as &$each); # this is used in your question