rfc:iterator_xyz_accept_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
Last revisionBoth sides next revision
rfc:iterator_xyz_accept_array [2022/06/21 14:20] timwollarfc:iterator_xyz_accept_array [2022/07/19 14:45] – Accepted timwolla
Line 3: Line 3:
   * Date: 2022-06-21   * Date: 2022-06-21
   * Author: Tim Düsterhus, duesterhus@woltlab.com   * Author: Tim Düsterhus, duesterhus@woltlab.com
-  * Status: Draft+  * Status: Accepted
   * First Published at: http://wiki.php.net/rfc/iterator_xyz_accept_array   * First Published at: http://wiki.php.net/rfc/iterator_xyz_accept_array
  
Line 9: Line 9:
 ===== Introduction ===== ===== Introduction =====
  
-PHP's iterator_*() family currently only accept <php>\Traversable</php>s (i.e. they reject plain <php>array</php>s). This is unnecessarily limiting.+PHP'<php>iterator_*()</php> family currently only accept <php>\Traversable</php>s (i.e. they reject plain <php>array</php>s). This is unnecessarily limiting.
  
-Specifically this concerns the <php>iterator_to_array()</php><php>iterator_count()</php> functions. While each of them has an array-specific counterpart, the fact that one needs to choose either the array-specific variant or the everything-but-array variant makes writing code the deals with arbitrary <php>iterable</php>s unnecessarily verbose.+Specifically this concerns the <php>iterator_to_array()</php> and <php>iterator_count()</php> functions. While each of them has an array-specific counterpart, the fact that one needs to choose either the array-specific variant or the everything-but-array variant makes writing code the deals with arbitrary <php>iterable</php>s unnecessarily verbose.
  
-Specifically allowing <php>iterator_to_array()</php> to take an array, makes it much easier to write functions accepting an <php>iterable</php> and processing it using <php>array_map()</php> et al:+As an example: Allowing <php>iterator_to_array()</php> to take an array, makes it much easier to write functions accepting an <php>iterable</php> and processing it using <php>array_map()</php> et al:
  
 <PHP> <PHP>
Line 34: Line 34:
 The <php>$iterator</php> parameter of <php>iterator_to_array()</php> and <php>iterator_count()</php> should be widened from <php>\Traversable</php> to <php>iterable</php> (i.e. to <php>\Traversable|array</php>). The <php>$iterator</php> parameter of <php>iterator_to_array()</php> and <php>iterator_count()</php> should be widened from <php>\Traversable</php> to <php>iterable</php> (i.e. to <php>\Traversable|array</php>).
  
-====== iterator_to_array ======+Specifically if this RFC is accepted the following shall hold: 
 + 
 +==== iterator_to_array ====
  
 <PHP> <PHP>
Line 41: Line 43:
 </PHP> </PHP>
  
-====== iterator_count ======+==== iterator_count ====
  
 <PHP> <PHP>
Line 47: Line 49:
 </PHP> </PHP>
  
-====== iterator_apply ======+==== iterator_apply ====
  
 This function is **not** part of this proposal, because it is non-obvious how to define the behavior for <php>array</php>s, given that it does not pass the <php>Iterator</php> to the callback by default. This function is **not** part of this proposal, because it is non-obvious how to define the behavior for <php>array</php>s, given that it does not pass the <php>Iterator</php> to the callback by default.
Line 87: Line 89:
 ===== Unaffected PHP Functionality ===== ===== Unaffected PHP Functionality =====
  
-Anything that isn't <php>iterator_to_array()</php><php>iterator_count()</php>, or <php>iterator_apply()</php>.+Anything that isn't <php>iterator_to_array()</php> or <php>iterator_count()</php>.
  
 ===== Future Scope ===== ===== Future Scope =====
Line 95: Line 97:
 ===== Proposed Voting Choices ===== ===== Proposed Voting Choices =====
  
-Each vote requires a 2/3 majority..+Each vote requires a 2/3 majority. 
 + 
 +Voting opened 2022-07-05 14:30 UTC and closes on 2022-07-19 14:45 UTC. 
 + 
 +<doodle title="iterator_to_array: Change the type of iterator_to_array()’s $iterator parameter from \Traversable to iterable?" auth="timwolla" voteType="single" closed="true"> 
 +   * Yes 
 +   * No 
 +</doodle> 
 + 
  
-  * Vote 1: Change the type of <php>iterator_to_array()</php>'<php>$iterator</php> parameter from <php>\Traversable</php> to <php>iterable</php>? +<doodle title="iterator_count: Change the type of iterator_count()s $iterator parameter from \Traversable to iterable?" auth="timwolla" voteType="single" closed="true"
-  Vote 2: Change the type of <php>iterator_count()</php>'s <php>$iterator</php> parameter from <php>\Traversable</php> to <php>iterable</php>?+   Yes 
 +   * No 
 +</doodle>
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
  
-PoC implementation to <php>iterator_to_array</php>: https://github.com/php/php-src/pull/8819+https://github.com/php/php-src/pull/8819
  
 ===== Implementation ===== ===== Implementation =====
rfc/iterator_xyz_accept_array.txt · Last modified: 2022/07/19 14:47 by timwolla