【问题标题】:PHP - What is the point of passing by reference?PHP - 通过引用传递的意义何在?
【发布时间】:2014-06-03 07:49:35
【问题描述】:

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

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

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.

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

【问题讨论】:

  • 一方面,如果你通过引用传递,你可以返回一个东西并仍然改变另一个,例如preg_match (se1.php.net/preg_match)。
  • 当您只有 1 个值要传递时,您的示例有效(因为函数最多只能返回 1 个值);如果您想从函数返回超过 1 个值作为输出而不需要创建元组怎么办?
  • 这两点都很好。
  • 第三点更微妙:使用引用通常更优雅,因为调用语法不同。而不是那个分配,你只需调用一个“做某事”的“例程”。举个例子:validateOrReplace($document)
  • 哦,还有一点,这一点实际上非常重要:根据定义,引用不会复制值。当您考虑一个具有巨大内存占用的对象时,这可能是一个非常重要的细节,尤其是当这样一个对象被传递给多个函数时......

标签: php pass-by-reference pass-by-value


【解决方案1】:

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

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

除了这两种情况,我认为这种方法会在大型代码库中造成混乱并导致一些讨厌的代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2012-07-06
    • 2015-07-04
    • 2011-05-24
    相关资源
    最近更新 更多