rfc:spread_operator_for_array

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
rfc:spread_operator_for_array [2019/04/05 13:35] – more example jhdxrrfc:spread_operator_for_array [2019/05/13 12:45] (current) – Implemented nikic
Line 3: Line 3:
   * Date: 2018-10-13   * Date: 2018-10-13
   * Author: CHU Zhaowei, jhdxr@php.net   * Author: CHU Zhaowei, jhdxr@php.net
-  * Status: Under discussion+  * Status: Implemented (in PHP 7.4)
   * First Published at: http://wiki.php.net/rfc/spread_operator_for_array   * First Published at: http://wiki.php.net/rfc/spread_operator_for_array
  
Line 36: Line 36:
 } }
 $arr6 = [...getArr(), 'c']; //['a', 'b', 'c'] $arr6 = [...getArr(), 'c']; //['a', 'b', 'c']
 +
 +$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; //['a', 'b', 'c']
 +
 +function arrGen() {
 + for($i = 11; $i < 15; $i++) {
 + yield $i;
 + }
 +}
 +$arr8 = [...arrGen()]; //[11, 12, 13, 14]
 </code> </code>
  
Line 75: Line 84:
 ===== Q & A ===== ===== Q & A =====
 ==== Advantages over array_merge ==== ==== Advantages over array_merge ====
-  - Spread operator should have a better performance than ''array_merge''. It'becuase not only that spread operator is a language structure while ''array_merge'' is a function call, but also compile time optimiztion can be performaned for constant arrays. +  - Spread operator should have a better performance than ''array_merge''. It'because not only that spread operator is a language structure while ''array_merge'' is a function call, but also compile time optimization can be performant for constant arrays. 
-  - ''array_merge'' only supports array, while spread operator also supportes objects implementing ''Traversable''+  - ''array_merge'' only supports array, while spread operator also supports objects implementing ''Traversable''
-<code php>+<PHP>
 // Before // Before
 array_merge(iterator_to_array($iter1), iterator_to_array($iter2)) array_merge(iterator_to_array($iter1), iterator_to_array($iter2))
  
-// Or to generalise to all iterables +// Or to generalize to all iterables 
-array_merge( is_array($iter1) ? $iter1 : iterator_to_array($iter1), +array_merge( 
-is_array($iter2) ? $iter2 : iterator_to_array($iter2) )+  is_array($iter1) ? $iter1 : iterator_to_array($iter1), 
 +  is_array($iter2) ? $iter2 : iterator_to_array($iter2) 
 +)
  
 // After (handles both cases) // After (handles both cases)
Line 89: Line 100:
  
 //Thanks Rowan for providing this example //Thanks Rowan for providing this example
-</code>+</PHP>
  
 ==== ... should be preserved for other use (e.g. map concat) ==== ==== ... should be preserved for other use (e.g. map concat) ====
Line 99: Line 110:
 ===== RFC Impact ===== ===== RFC Impact =====
 ==== To Opcache ==== ==== To Opcache ====
-I'm not sure if this RFC will have any impact on Opcache. I'll check it after I finish the patch.+Some changes in opcache to support the new opcode is needed. 
  
 +===== Vote =====
 +Voting started 2019-04-22 and ends 2019-05-06. A 2/3 majority is required.
  
-===== Proposed Voting Choices ===== +<doodle title="Support spread operator for array definition in PHP 7.4?" auth="jhdxr" voteType="single" closed="true"> 
-As this is a language change, a 2/3 majority is required. +   * Yes 
 +   * No 
 +</doodle>
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
rfc/spread_operator_for_array.1554471340.txt.gz · Last modified: 2019/04/05 13:35 by jhdxr