首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >$var和&$var有什么区别?

$var和&$var有什么区别?
EN

Stack Overflow用户
提问于 2010-12-29 23:16:27
回答 5查看 15.2K关注 0票数 21

它们之间的区别是什么

代码语言:javascript
运行
复制
foreach ($my_array as $my_value) {
}

和:

代码语言:javascript
运行
复制
foreach ($my_array as &$my_value) {
}

我可以请你给我两个真实世界的例子,告诉我什么时候使用一个,什么时候使用另一个?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-12-29 23:18:14

第一个示例创建该值的副本,而第二个示例使用对原始值的引用。因此,在第一个foreach运行之后,原始数组仍然保持不变。在第二个foreach之后,原始数组可能已经被修改,因为它是通过引用处理的。

一些原生PHP函数已经以这种方式工作了,比如shuffle(),它会重新排列数组的内容。你会注意到这个函数并没有返回一个数组,你只需要调用它:

代码语言:javascript
运行
复制
$myArray = array('foo', 'bar', 'fizz', 'buzz');
shuffle( $myArray );
// $myArray is now shuffled

它发挥了它的魔力,因为它通过引用来处理数组,而不是创建数组的副本。

还有一些函数不通过引用传递任何东西,而是处理原始值的副本,例如ucwords(),它返回新的结果字符串:

代码语言:javascript
运行
复制
$myString = "hello world";
$myString = ucwords( $myString );
// $myString is now capitalized

参见Passing by Reference

票数 29
EN

Stack Overflow用户

发布于 2010-12-29 23:28:34

Jonathan's answers对此进行了很好的描述。为了完整起见,下面是您的两个示例:

  1. 只读取值:

$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].访问/更改原始值

票数 6
EN

Stack Overflow用户

发布于 2010-12-29 23:32:52

当你在一个变量前面加上一个&符号时,你就是在创建一个“引用”。PHP引用就像计算机上的快捷方式或符号链接。您可以创建一个指针变量,它只是相同数据的另一个名称。

我看不出使用它们有什么很大的不同,除了你不会复制一个变量来节省内存。在传递变量时,可以只将引用和引用点传递给原始对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4555263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档