laravel集合map方法为什么可以直接修改集合而不能修改数组呢?

代码

<?php

public  function  index()
{
    $users =  collect([
        collect(['name' => '张三']),
        collect(['name' => '李四']),
        ['name' => '王五']
    ]);

    $users->map(function  ($item,  $key)  {
        $item['name']  .=  'xxxx';
    });

    dd($users,  $new_users);
 }

运行结果(图片传不上来了。。。)

Illuminate\Support\Collection {#388 ▼
  #items: array:3 [0 => Illuminate\Support\Collection {#424 ▼
      #items: array:1 ["name" => "张三xxxx"
      ]
      #escapeWhenCastingToString: false
    }
    1 => Illuminate\Support\Collection {#425 ▼
      #items: array:1 ["name" => "李四xxxx"
      ]
      #escapeWhenCastingToString: false
    }
    2 => array:1 ["name" => "王五"
    ]
  ]
  #escapeWhenCastingToString: false
}
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

对象传递始是引用的方式

在 PHP 对象编程经常提到的一个关键点是“默认情况下对象是通过引用传递的”。但其实这不是完全正确的。下面通过一些例子来说明。

PHP 的引用是别名,就是两个不同的变量名字指向相同的内容。在 PHP 中,一个对象变量不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。 当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。

参考 PHP: 对象和引用 - Manual

2年前 评论
讨论数量: 4

按测试的来看,修改走的是引用,可以猜测的是集合属于引用也实现了数组修改的方法,所以可以成功。而数组不是引用,使用map也没有用返回,那就相当于没有修改,所以数组修改失败

2年前 评论

对象传递始是引用的方式

在 PHP 对象编程经常提到的一个关键点是“默认情况下对象是通过引用传递的”。但其实这不是完全正确的。下面通过一些例子来说明。

PHP 的引用是别名,就是两个不同的变量名字指向相同的内容。在 PHP 中,一个对象变量不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。 当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。

参考 PHP: 对象和引用 - Manual

2年前 评论

map() 方法源码中其实就是调用了 array_map() 函数,是需要调用者在传入闭包参数中有返回值的。

2年前 评论

你少写了return

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!