====== 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.