dongnaota6386 2010-07-16 01:42
浏览 142
已采纳

在PHP的foreach循环中通过引用迭代器传递的优点是什么?

I just read this answer by Bill Karwin.

Note that the $node is pass by reference.

I always thought that variable created there is only ever temporary and exists only until the end of the loop (or maybe it remains set to the last iteration - I have not tested it).

So, what are the advantages of making it pass by reference?

I'm sure there is one, but I can't figure it out yet.

  • 写回答

2条回答 默认 最新

  • doucheng5209 2010-07-16 01:52
    关注

    It has nothing to do with being faster or more efficient.

    PHP implements copy-on-write so a variable may refer to the same area of memory until you change its value. Then when you change the variable, PHP decides whether or not to create a copy depending on whether you're accessing it by value or by reference.

    Access by value -- changes to a variable creates a copy:

    $a = array("abc");
    
    foreach ($a as $element) {
      $element = "def";
    }
    
    print_r($a);
    
    Array
    (
        [0] => abc
    )
    

    Access by reference -- changes to a variable affect the original copy:

    foreach ($a as &$element) {
      $element = "def";
    }
    
    print_r($a);
    
    Array
    (
        [0] => def
    )
    

    Note that all objects in PHP 5 are accessed by reference without using the & operator.
    This is a good reason to use objects!

    Be very careful using references in PHP, because they can have confusing effects.

    Be sure to read this blog: Do not use PHP references by PHP core developer Johannes Schlüter

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 求用matlab求解上述微分方程的程序代码
  • ¥15 请问各位,如何在Jetson nano主控板的Ubuntu系统中安装PyQt5
  • ¥15 MAC安装佳能LBP2900驱动的网盘提取码
  • ¥400 微信停车小程序谁懂的来
  • ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致