rfc:normalize_inc_dec
no way to compare when less than two revisions

Differences

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


Previous revision
Next revision
rfc:normalize_inc_dec [2014/02/01 05:32] datibbaw
Line 1: Line 1:
  
 +====== PHP RFC: Normalize increment and decrement operators ======
 +  * Version: 0.1
 +  * Date: 2013-12-19
 +  * Author: Tjerk Meesters (datibbaw)
 +  * Status: Draft
 +  * First Published at: https://wiki.php.net/rfc/normalize_inc_dec
 +
 +===== Introduction =====
 +
 +The current behaviour of increment and decrement operators is not very intuitive:
 +
 +<code php>
 +// booleans
 +$a = false; ++$a; // bool(false)
 +$a = true; --$a; // bool(true)
 +
 +// null values
 +$a = null; --$a; // null
 +$a = null; ++$a; // int(1)
 +
 +// empty strings
 +$a = ''; ++$a; // string(1) "1"
 +
 +// non-numeric strings
 +$a = '12d9'; 
 +++$a; // string(4) "12e0"
 +++$a; // float(13)
 +</code>
 +
 +===== Proposal =====
 +
 +The proposal is either:
 +  - Treat boolean and null types as a restricted type value and deprecate alphanumeric increment.
 +  - Treat boolean and null types as an integer value and deprecate alphanumeric increment.
 +  - No changes.
 +
 +==== Option 1: Restricted type values ====
 +
 +<code php>
 +// booleans
 +$a = false; 
 +++$a; // bool(true)
 +++$a; // bool(true)
 +$a = true; 
 +--$a; // bool(false)
 +--$a; // bool(false)
 +
 +// null values
 +$a = null; --$a; // null
 +$a = null; ++$a; // null
 +
 +// empty strings
 +$a = ''; ++$a; // int(1)
 +</code>
 +
 +==== Option 2: Integer values ====
 +
 +<code php>
 +// booleans
 +$a = false; 
 +++$a; // bool(true)
 +++$a; // int(2)
 +$a = true; 
 +--$a; // bool(false)
 +--$a; // int(-1)
 +
 +// null values
 +$a = null; --$a; // int(-1)
 +$a = null; ++$a; // int(1)
 +</code>
 +
 +==== Deprecating alphanumeric string increment ====
 +
 +<code php>
 +// non-numeric strings
 +$a = '12d9'; 
 +++$a; // string(4) "12e0" + Notice: String increment is deprecated, use str_inc() instead in php shell code on line 1
 +++$a; // float(13)
 +</code>
 +
 +Additionally, it makes two new string functions available:
 +
 +  * ''str_inc($str)'' - to perform the current string increments.
 +  * ''str_dec($str)'' - the string decrement.
 +
 +===== Backward Incompatible Changes =====
 +
 +With "option 1" the null value no longer increments to 1; this may lead to problems in for-loops with null values as the start argument.
 +
 +===== Proposed PHP Version(s) =====
 +
 +**Next 5.x**
 +
 +Introduce a notice for the current string increment use case. This will help developers spot their usage more easily.
 +
 +**Next major**
 +
 +Removal of string increment using ++ and --.
 +
 +===== Open Issues =====
 +
 +None.
 +
 +===== Unaffected PHP Functionality =====
 +
 +The changes do not affect the following data types:
 +  * ''array''
 +  * ''int''
 +  * ''float''
 +  * ''object''
 +  * ''resource''
 +
 +===== Proposed Voting Choices =====
 +
 +Yay or nay.
 +
 +===== Patches and Tests =====
 +
 +Coming soon ...
 +
 +===== Implementation =====
 +
 +N/A
 +
 +===== References =====
 +
 +[[https://github.com/php/php-src/pull/547|Pull Request]]
 +
 +The competing proposal:
 +
 +[[alpanumeric_decrement|Alphanumeric Decrement]]
 +
 +===== Rejected Features =====
 +
 +Keep this updated with features that were discussed on the mail lists.
rfc/normalize_inc_dec.txt · Last modified: 2018/06/18 10:17 by cmb