====== PHP RFC: Normalize increment and decrement operators ======
* Version: 0.2
* Date: 2013-12-19
* Author: Tjerk Meesters (datibbaw)
* Status: Inactive
* First Published at: https://wiki.php.net/rfc/normalize_inc_dec
===== Introduction =====
The current behaviour of increment and decrement operators is not very intuitive:
// 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)
===== Proposal =====
The proposal is:
- always treat boolean and null types as an integer, but raise a warning.
- deprecate alphanumeric increment and introduce ''str_inc()'' and ''str_dec()''.
==== Operation on bool / null ====
// booleans
$a = false;
++$a; // int(1) + warning
++$a; // int(2)
$a = true;
--$a; // int(0) + warning
--$a; // int(-1)
// null values
$a = null; --$a; // int(-1) + warning
$a = null; ++$a; // int(1) + warning
==== Operation on alphanumeric strings ====
// 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)
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 =====
Incrementing ''null'' will now raise a warning; incrementing alphanumeric strings will raise a deprecation notice.
===== Proposed PHP Version(s) =====
**PHP 7**
===== 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.