它们之间的区别是什么
foreach ($my_array as $my_value) {
}和:
foreach ($my_array as &$my_value) {
}我可以请你给我两个真实世界的例子,告诉我什么时候使用一个,什么时候使用另一个?
发布于 2010-12-29 23:18:14
第一个示例创建该值的副本,而第二个示例使用对原始值的引用。因此,在第一个foreach运行之后,原始数组仍然保持不变。在第二个foreach之后,原始数组可能已经被修改,因为它是通过引用处理的。
一些原生PHP函数已经以这种方式工作了,比如shuffle(),它会重新排列数组的内容。你会注意到这个函数并没有返回一个数组,你只需要调用它:
$myArray = array('foo', 'bar', 'fizz', 'buzz');
shuffle( $myArray );
// $myArray is now shuffled它发挥了它的魔力,因为它通过引用来处理数组,而不是创建数组的副本。
还有一些函数不通过引用传递任何东西,而是处理原始值的副本,例如ucwords(),它返回新的结果字符串:
$myString = "hello world";
$myString = ucwords( $myString );
// $myString is now capitalized参见Passing by Reference。
发布于 2010-12-29 23:28:34
Jonathan's answers对此进行了很好的描述。为了完整起见,下面是您的两个示例:
$my_array = range(0,3);foreach ($my_array as $my_value) { echo $my_value .PHP_EOL;}
foreach ($my_array as &$my_value) { $my_value += 42;}
如果您不使用&$my_value,那么添加操作将不会对$my_array产生任何影响。但您也可以不使用引用来编写相同的代码:
foreach($my_array as $key=>$value) { $my_array$key = $value + 42;}
不同之处在于,我们直接使用$my_array[$key].访问/更改原始值
发布于 2010-12-29 23:32:52
当你在一个变量前面加上一个&符号时,你就是在创建一个“引用”。PHP引用就像计算机上的快捷方式或符号链接。您可以创建一个指针变量,它只是相同数据的另一个名称。
我看不出使用它们有什么很大的不同,除了你不会复制一个变量来节省内存。在传递变量时,可以只将引用和引用点传递给原始对象。
https://stackoverflow.com/questions/4555263
复制相似问题