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条)

报告相同问题?

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路