rfc:negative_array_index

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
Next revisionBoth sides next revision
rfc:negative_array_index [2017/04/21 00:13] pmmagarfc:negative_array_index [2018/03/01 23:52] – Open vote pmmaga
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 com +  * Author: Pedro Magalhães, pmmaga@php.net 
-  * Status: Draft+  * Status: Voting
   * 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="false"> 
 +   * Yes 
 +   * No 
 +</doodle> 
 + 
 +---- 
 + 
 +<doodle title="Deprecation notice for 7.3" auth="pmmaga" voteType="single" closed="false"> 
 +   * 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.txt · Last modified: 2020/08/01 23:40 by carusogabriel