通过引用分配的意义何在?

这个问题在这里已经有了答案:

  • “&”运算符如何在PHP函数中工作? 4个答案

  • 这里有一些例子:

    为非常长的变量制作别名

    $config = array(
       'developers' =>  => array(
             'emails' => array()
          ),
    );
    $dev_emails = &$config['developers']['emails'];
    $dev_emails[] = 'email1@tld.com';
    $dev_emails[] = 'email2@tld.com';
    $dev_emails[] = 'email3@tld.com';
    

    用不同的名称命名单个值

    $result_count = mysql_num_rows();
    $table_rows = &$number_of_results;
    

    尽早分配数组项目

    $post = $_POST;
    $time = time();
    $article = array(
        'article_contents' => &$post['contents'],
        'article_title' => &$post['title'],
        'article_tags' => &$post['tags'],
        'insert_time' => &$time
    );
    
    if (array_filter($article) < 3) {
       throw new Exception("Required fields are blank");
    }
    
    $post['contents'] = striptags($post['contents']);
    
    # imaginary model
    # article::insert($article);
    

    ^即使对我来说,这似乎也是不切实际的,但我知道这对我有用很多次

    保存内存? (只是一个理论)

    还有更多的应用程序只会在你编码时出现,你会注意到在你已经编码的时候它的用处


    有一段时间,通过避免复制长字符串可以节省内存。 但现代版本的PHP使用copy-on-write,所以这不是一个问题。

    也就是说,复制写入意味着如果您分配$a = $b ,它实际上并没有使用更多的内存。 $a内部指向$b指向的内存中的相同内容。 但他们不应该像参考一样链接。 所以如果你修改$b ,那么PHP在这时就会使$a成为原始值$b $a一个实体副本。 如果您修改$a ,那么它会为其新值获取自己的内存空间。

    副作用仍然有用。

    例如,在使用foreach时:

    $a = array(1, 2, 3);
    
    foreach ($a as $value) {
      $value *= 2; // does not change contents of $a
    }
    
    foreach ($a as &$value) {
      $value *= 2; // changes contents of $a
    }
    

    或者当传递函数参数时,并且您希望该函数修改参数的值。

    链接地址: http://www.djcxy.com/p/57595.html

    上一篇: What is the point of assigning by reference?

    下一篇: Why should I need "&"?