Php:$var和&$var有什么区别?
两者之间有什么区别
foreach ($my_array as $my_value) {
}
和:
foreach ($my_array as &$my_value) {
}
?
我能请你给我两个现实世界的例子,说明何时使用一个,何时使用另一个?
两者之间有什么区别
foreach ($my_array as $my_value) {
}
和:
foreach ($my_array as &$my_value) {
}
?
我能请你给我两个现实世界的例子,说明何时使用一个,何时使用另一个?
第一个示例创建值的副本,而第二个示例使用对原始值的引用。因此,在第一次运行之后,原始数组仍未受影响。在第二个之后,原始数组可以被修改,因为它是通过引用处理的。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
请参见通过引用传递。
乔纳森的回答很好地描述了这一点。为了完整起见,这里有两个例子:
只需读取值:
$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]