PHP - 通过引用传递的意义何在?

PHP - What is the point of passing by reference?

提问人:Nu Gnoj Mik 提问时间:4/19/2014 更新时间:8/14/2015 访问量:60

问:

好的,我知道通过引用传递是什么......我不需要解释。

假设您有一个通过引用接收参数的函数:

function foo(&$a){
   $a = 1;
}

你称它为:

$a = 0;
foo($a); // Now $a is 1.

您可以执行与按值传递完全相同的操作:

function foo($a){
   $a = 1;
   return $a;
}

你称它为:

$a = 0;
$a = foo($a);  // Now $a is 1.

那么,通过引用传递的意义何在?

PHP 按引用 传递值

评论

1赞 powerbuoy 4/19/2014
首先,如果你通过引用传递,你可以返回一个东西,但仍然改变另一个东西,例如(se1.php.net/preg_match)。preg_match
1赞 Dai 4/19/2014
当您只有 1 个值要传递时,您的示例有效(因为函数最多只能返回 1 个值);如果要从函数中返回 1 个以上的值作为输出,而不必创建元组,该怎么办?
1赞 Nu Gnoj Mik 4/19/2014
两个都很好。
0赞 arkascha 4/19/2014
第三点更微妙:由于调用语法不同,因此使用引用通常更优雅。而不是那个标志,你只是称之为“例程”,它对某事“做某事”。举个例子:validateOrReplace($document)
1赞 arkascha 4/19/2014
哦,还有一点,这一点实际上非常重要:根据定义,引用不会复制值。当您考虑具有巨大内存占用的对象时,这可能是一个非常重要的细节,尤其是当这样的对象被移交给多个功能时......

答:

0赞 Nu Gnoj Mik 8/14/2015 #1

从上面发布的评论和其他一些研究中回答我自己的问题:

  1. 由于只有对对象的引用才会传递给按引用传递的函数,因此在尝试节省内存时,它可能特别有用。
  2. 如果存在这样一种情况,即您想要更改一个实体但返回一个不同的实体,则按引用传递可以派上用场(尽管我宁愿使用多个带有返回值的函数)。

除了这两种情况之外,我认为这种方法可能会在大型代码库中引起混淆,并导致一些令人讨厌的代码。

如果您知道我应该添加的任何其他原因,请发表评论,我会在这里添加它们。