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

报告相同问题?