代码之家  ›  专栏  ›  技术社区  ›  Vidar Vestnes

何时在php中通过引用传递

  •  30
  • Vidar Vestnes  · 技术社区  · 15 年前

    我想知道,当您只读取变量时,通过引用传递是一种好的做法,还是应该始终将其作为值传递。

    按引用传递的示例:

    $a = 'fish and chips';
    $b = do_my_hash($a);
    echo $b;
    
    function &do_my_hash(&$value){
       return md5($value);
    }
    

    传递值示例:

    $a = 'fish and chips';
    $b = do_my_hash($a);
    echo $b;
    
    function do_my_hash($value){
       return md5($value);
    }
    

    哪个更好?如果我用1000发子弹绕一圈?

    循环示例:

    for($i = 0 ; $i < 1000 ; $i++){
       $a = 'Fish & Chips '.$i;
       echo do_my_hash($a);
    }
    
    5 回复  |  直到 10 年前
        1
  •  45
  •   iconoclast    10 年前

    如果你想通过 价值 (因此函数不会修改它) ,没有理由通过引用传递它:它只会使您的代码更难理解,正如人们所想的那样。” 这个函数可以修改我将传递给它的内容-哦,它不会修改它吗?

    在您提供的示例中, do_my_hash 函数不修改 价值 你在传递给它;所以,我不会使用引用。

    如果你关心性能,你应该阅读这篇最近的博文: Do not use PHP references :

    人们使用参考资料的另一个原因是 因为他们认为这是代码 更快。但这是错误的。它是平的 更糟的是:引用主要使代码 更慢的!是的,推荐人经常 代码变慢了-对不起,我不得不 重复此步骤以使其清晰。

    实际上,这篇文章可能是一篇有趣的阅读文章,即使您主要关心的不是性能;-)

        2
  •  12
  •   Matthew    15 年前

    php尽可能多地使用copy-on-write(每当它通常会提高性能时),因此使用引用不会给您带来任何性能上的好处;它只会带来伤害。只有在你真正需要的时候才使用推荐信。从php手册:

    使用引用返回来提高性能。引擎将自动优化它自己。只有在有有效的技术原因时才返回引用。

        3
  •  8
  •   Cruachan    15 年前

    好的编程实践总是尽可能地传递值,如果必须修改单个值,则通常最好是作为函数的结果返回修改后的值,而不是通过引用传递值。

    唯一需要通过引用传递的情况是需要修改多个值。然而,这些情况往往很少见,通常应该将其视为检查代码的标志,因为可能有更好的方法来解决问题。

    早在一天以前,早期的编程语言总是用来通过引用传递值,而传递值则是后来的一种开发,用于解决由此产生的问题(您最终往往会出现一些不明显的错误,因为迟早会有一些程序员在OME函数或其他函数,然后很难确定在哪里并正确修复-您往往最终会得到多个模糊的依赖项)。因此,当我们是多代处理器的时候,认真地考虑这是一个减少几个机器周期的选择是非常不合理的,因为这被认为是CPU与复杂度之间的一个很好的折衷,有助于清洁、可维护的代码。

        4
  •  3
  •   John Parker    15 年前

    微观优化的乐趣。-)

    老实说,通过引用传递“normal”变量(除非您想影响它们在原始范围内的值),可能不会有太多收获。另外,由于php 5对象是通过引用自动传递的。

        5
  •  2
  •   Mike Trpcic    15 年前

    如果不想在函数中修改该值,则通过引用传递没有任何好处。我尽量使用pass-by值,因为它更容易阅读,而且脚本的流程更一致。