rfc:negative_array_index

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:negative_array_index [2017/04/21 00:29]
pmmaga
rfc:negative_array_index [2018/03/16 17:45] (current)
pmmaga Closed vote
Line 1: Line 1:
 ====== PHP RFC: Arrays starting with a negative index ====== ====== PHP RFC: Arrays starting with a negative index ======
-  * Version: 0.1+  * Version: 0.4
   * Date: 2017-04-20   * Date: 2017-04-20
-  * Author: Pedro Magalhães, ​mail at pmmaga ​dot net +  * Author: Pedro Magalhães, pmmaga@php.net 
-  * Status: ​Draft+  * Status: ​Accepted
   * First Published at: http://​wiki.php.net/​rfc/​negative_array_index   * First Published at: http://​wiki.php.net/​rfc/​negative_array_index
  
 ===== Introduction ===== ===== Introduction =====
-Currently, any array that has a number ''​n''​ as it's first numeric key will have for it's next implicit key either ​''​n+1'' ​if ''​n >= 0'' ​or ''​0'' ​if ''n < 0''​. This RFC proposes to make this consistent ​by always using ''​n+1''​ regardless of the sign of ''​n''​.+On the documentation ​for ''​[[http://​php.net/​manual/​en/​function.array-fill.php|array_fill]]'' ​the ''​start_index'' ​description mentions: "​If ​''​start_index'' ​is negative, the first index of the returned array will be ''​start_index'' ​and the following indices will start from zero." ​This is consistent ​everywhere when an explicit negative key is used and implicit keys are used afterwards.
  
 ===== Proposal ===== ===== Proposal =====
-As mentioned on the relevant part of the [[http://​php.net/​manual/​en/​language.types.array.php|arrays documentation]]:​+In other words, any array that has a number ''​n''​ as it's first numeric key will have for it's next implicit key either ''​n+1''​ if ''​n >= 0''​ or ''​0''​ if ''​n < 0''​. This RFC proposes to make this consistent by always using ''​n+1''​ regardless of the sign of ''​n''​. 
 + 
 +As also mentioned on the relevant part of the [[http://​php.net/​manual/​en/​language.types.array.php|arrays documentation]]:​
 > if no key is specified, the maximum of the existing integer indices is taken, and the new key will be that maximum value plus 1 (but at least 0). > if no key is specified, the maximum of the existing integer indices is taken, and the new key will be that maximum value plus 1 (but at least 0).
  
 This RFC proposes to eliminate the parenthesis part of that sentence. Which is an exception to a rule, that people have to learn one way or the other. This RFC proposes to eliminate the parenthesis part of that sentence. Which is an exception to a rule, that people have to learn one way or the other.
 +
 +This proposal targets 8.0. However, to ease the transition and find places where this may become an issue, there is a secondary vote for emitting a deprecation notice in cases where the behavior will change.
  
 All the variables in this code: All the variables in this code:
Line 41: Line 45:
 } }
 </​code>​ </​code>​
 +
 +<​blockquote>​
 +NOTE: If accepted, during the deprecation phase the following ''​E_DEPRECATED''​ notice would be emitted in cases where the behavior will change:
 +
 +<​code>​
 +Deprecated: In the next major version of PHP the implicit keys of this array will start from -1 instead of 0 in ...
 +</​code>​
 +</​blockquote>​
  
 With the implementation of this RFC, they will all result in: With the implementation of this RFC, they will all result in:
Line 61: Line 73:
 <?php <?php
  
-$a[-2] = true; +$a[-2] = true; // Current: Key is -2, RFC: Key is -2 
-$a[] = true; +$a[] = true; // Current: Key is 0, RFC: Key is -1 
-$a[] = true;+$a[] = true; // Current: Key is 1, RFC: Key is 0
  
 if ($a[1] === true) { if ($a[1] === true) {
-    echo 'Save the world.';+    echo 'Accessing key 1 explicitly';
 } }
 </​code>​ </​code>​
  
-Will no longer ​save the world.+Will no longer ​output ''​Accessing key 1 explicitly''​. 
 + 
 +<​blockquote>​ 
 +NOTE: If accepted, during the deprecation phase the ''​E_DEPRECATED''​ notice mentioned in the previous section would be emitted. 
 +</​blockquote>​
  
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
-PHP 7.2+PHP 8.0 
 +(Deprecation notice for 7.3)
  
 ===== Unaffected PHP Functionality ===== ===== Unaffected PHP Functionality =====
-Arrays with explicit keys, string keys, or an initial numeric index ''>​= ​0''​ are not affected. This also means that arrays that never use explicit keys will still start with ''​0''​.+Arrays with explicit keys, string keys, or an initial numeric index ''>​= ​-1''​ are not affected. This also means that arrays that never use explicit keys will still start with ''​0''​.
  
-Furthermore,​ iterating over arrays without explicit keys (ie. ''​foreach''​) is also not affected.+Furthermore,​ iterating over arrays without explicit keys (ie. ''​foreach''​) is not affected.
  
-===== Proposed ​Voting Choices ===== +===== Voting Choices ===== 
-This RFC requires ​a 2/3 majority.+Both votes require ​a 2/3 majority. 
 + 
 +<doodle title="​Arrays starting with a negative index for 8.0" auth="​pmmaga"​ voteType="​single"​ closed="​true">​ 
 +   * Yes 
 +   * No 
 +</​doodle>​ 
 + 
 +---- 
 + 
 +<doodle title="​Deprecation notice for 7.3" auth="​pmmaga"​ voteType="​single"​ closed="​true">​ 
 +   * Yes 
 +   * No 
 +</​doodle>​ 
 + 
 +<​blockquote>​The previous vote targeting 7.2 was closed with 14 for and 16 against</​blockquote>​
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
Line 89: Line 120:
  
 ===== References ===== ===== References =====
-Discussion on the mailing list:​https://​externals.io/​thread/712+Version 0.3: 
 + 
 +Discussion on the mailing list: https://​externals.io/​message/98302 
 + 
 +First proposal Voting period discussion: https://​externals.io/​message/​99412 
 + 
 +Second proposal Voting period discussion: https://​externals.io/​message/​99511 
 + 
 +---- 
 +Version 0.4:
  
 +Discussion on the mailing list: https://​externals.io/​message/​101861
rfc/negative_array_index.1492734550.txt.gz · Last modified: 2017/09/22 13:28 (external edit)