Table of Contents

PHP RFC: Normalize increment and decrement operators

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:

  1. always treat boolean and null types as an integer, but raise a warning.
  2. 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:

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:

Proposed Voting Choices

Yay or nay.

Patches and Tests

Coming soon ...

Implementation

N/A

References

Pull Request

The competing proposal:

Alphanumeric Decrement

Rejected Features

Keep this updated with features that were discussed on the mail lists.