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
rfc:iterator_xyz_accept_array [2022/06/21 14:20] timwollarfc:iterator_xyz_accept_array [2022/07/19 14:47] (current) – Implemented. 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: Implemented 
 +  * Target Version: PHP 8.2 
 +  * Implementation: https://github.com/php/php-src/commit/7ae7df5b4601f3f0ce45a27324fb9c6ebcbfc9ed
   * 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 11:
 ===== 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 36:
 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 45:
 </PHP> </PHP>
  
-====== iterator_count ======+==== iterator_count ====
  
 <PHP> <PHP>
Line 47: Line 51:
 </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 91:
 ===== 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 99:
 ===== 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 =====
  
-n/a+https://github.com/php/php-src/commit/7ae7df5b4601f3f0ce45a27324fb9c6ebcbfc9ed
  
 ===== References ===== ===== References =====
rfc/iterator_xyz_accept_array.1655821227.txt.gz · Last modified: 2022/06/21 14:20 by timwolla