> Hi, I worked together with Chris Wright, author of the other RFC covering
> the same thing.

Thanks for pointing it out and also thanks CMB for posting the link. 
I tried to search for this topic but didn't find anything, as we have too many 
names for this feature.


> The most important thing is that we don't want it work like array_merge();
> in other words, it must not cover both lists and maps at the same time.

Since PHP array is a mixture of list (traditional array in most of other 
languages) and map (a k=>v data structure), 
any new syntax related to PHP array most cover both use cases.
`...` means unpacking, I think we are all good with this semantic, the 
disagreement is about the behavior of key conflict.

Let's use your example to start my explanation:
```
['a' => 1, 'b'=>2, ...['a' => 3]]
```

Since we are create a new syntax with the existing array definition syntax, 
let's try to do the unpack manually.
```
['a' => 1, 'b' =>2, 'a' => 3]
```

Although this not a good practice to write such codes, it's still valid in 
current version without any warning or even notice. 
The answer for above code is
```
['a' => 3, 'b' => 2]
```

It looks weird at first glance, but IMO the more important thing is this is how 
PHP works now. 
I really don't think it's a good idea to introduce a new way how two arrays 
will get merged. 
It will confuse developers.



I also notice there is an interesting question in the discussion of your RFC.
> So, it's just an operator version of array_merge(), with no advantages
> other than brevity? I'm not sure why it's any more or less applicable to
> constant arrays vs variables than + or array_merge() are.

Yes. The spread operator follows the semantics as `array_merge`, but besides 
brevity and better performance 
(no more overhead of function call, and constant array can be compiled at 
compiled time), 
this RFC also brings the support for objects implementing `Traversables`.

Best regards,
CHU Zhaowei




--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to