Php 在Laravel集合类中设置嵌套数组
考虑以下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
$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;