Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel集合类中设置嵌套数组_Php_Laravel_Overloading - Fatal编程技术网

Php 在Laravel集合类中设置嵌套数组

Php 在Laravel集合类中设置嵌套数组,php,laravel,overloading,Php,Laravel,Overloading,考虑以下Laravel片段: $var = collect(['foo' => []]); $var['foo']['x'] = 2; 它导致注意:间接修改lightize\Support\Collection的重载元素在C:/…/file.php中无效。这是怎么回事 我知道我以前遇到过这个问题,我可以告诉你这与拉威尔无关。这个问题适用于实现PHP的ArrayAccess接口的任何类。让我解释一下 如果您查看PHP的接口,您将看到以下方法: abstract public mixed o

考虑以下Laravel片段:

$var = collect(['foo' => []]);
$var['foo']['x'] = 2;

它导致
注意:间接修改lightize\Support\Collection的重载元素在C:/…/file.php中无效。这是怎么回事

我知道我以前遇到过这个问题,我可以告诉你这与拉威尔无关。这个问题适用于实现PHP的
ArrayAccess
接口的任何类。让我解释一下

如果您查看PHP的接口,您将看到以下方法:

abstract public mixed offsetGet ( mixed $offset )
这种方法的通用定义如下:

public function offsetGet($offset) {
    return isset($this->container[$offset]) ? $this->container[$offset] : null;
}
实现这个
ArrayAccess
接口,它允许您以数组的形式访问对象

那么,在这个对象上使用
[]
操作符时会发生什么?调用
offsetGet
方法,它返回一个数组,但不返回对该数组的引用。因此,您所做的任何更改都将进入空间,因为返回的数组不引用对象中的实际数组。通过查看
ArrayAccess
接口,您可以更好地理解这一点,但真正重要的是解决方案

$var = collect(['foo' => []]);

$temp = $var['foo'];
$temp['x'] = 2;

$var['foo'] = $temp;