rfc:argument_unpacking

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
rfc:argument_unpacking [2014/01/11 12:12]
nikic -> Implemented
rfc:argument_unpacking [2017/09/22 13:28] (current)
Line 39: Line 39:
 </​code>​ </​code>​
  
-It's possible to use ''​%%...%%''​ multiple times in a call and it is possible to mix it with normal arguments:+It's possible to use ''​%%...%%''​ multiple times in a call and it is possible to use normal arguments ​before argument unpacking:
  
 <code php> <code php>
Line 46: Line 46:
 test(...$args1,​ ...$args2); // [1, 2, 3, 4, 5, 6] test(...$args1,​ ...$args2); // [1, 2, 3, 4, 5, 6]
 test(1, 2, 3, ...$args2); ​  // [1, 2, 3, 4, 5, 6] test(1, 2, 3, ...$args2); ​  // [1, 2, 3, 4, 5, 6]
-test(...$args1,​ 4, 5, 6);   // [1, 2, 3, 4, 5, 6]+</​code>​ 
 + 
 +However, it is not possible to use normal arguments after argument unpacking was used. Both of the following are invalid: 
 + 
 +<code php> 
 +test(...$args1,​ 4, 5, 6); 
 +test(...$args1, 4, 5, 6, ...$args2);
 </​code>​ </​code>​
  
Line 74: Line 80:
  
 <code php> <code php>
-var_dump(1, 2, ...null, 3, 4);+var_dump(1, 2, ...null, ​...[3, 4]);
 // Warning: Only arrays and Traversables can be unpacked // Warning: Only arrays and Traversables can be unpacked
 // int(1) int(2) int(3) int(4) // int(1) int(2) int(3) int(4)
Line 213: Line 219:
     }     }
 } }
-</​code>​ 
- 
-==== Normal arguments after unpacked arguments ==== 
- 
-Some people also had doubts regarding the usefulness of allowing ''​%%foo(...$args,​ $arg)%%''​ calls, where a normal argument follows after an unpacked argument. 
- 
-One use-case for this pattern are the variants of ''​array_diff''​ and ''​array_intersect''​ which accept callback functions as the **last** one or two arguments: 
- 
-<code php> 
-array_udiff(...$arrays,​ $valueCmpFunction);​ 
-array_udiff_uassoc(...$arrays,​ $valueCmpFunction,​ $keyCmpFunction);​ 
-</​code>​ 
- 
-While this kind of API was undoubtedly a bad choice in the first place, I see little reason not to support calls to them. 
- 
-Another use case is appending one additional argument to a variadic argument list. For example, the following snippet adds an additional ''​LIMIT''​ parameter to an existing query: 
- 
-<code php> 
-$this->​query($query . ' LIMIT ?', ...$params, $limit); 
 </​code>​ </​code>​
  
rfc/argument_unpacking.1389442371.txt.gz · Last modified: 2017/09/22 13:28 (external edit)