rfc:throwable-code-generalization

PHP RFC: Throwable error code's type generalization

Introduction

Currently Exception::$code, Error::$code and Throwable::getCode() are said to be int only, but this is actually violated by PHP itself, specifically by the PDO extension, whose error codes are strings instead.

As such, code that assumes that the interface always uses int is already potentially broken - because it doesn't special-case PDO - or it does already special-case the type so that PDO's errors don't create issues.

Proposal

As this inconsistency is present, this RFC proposes to generalize the Throwable's code so that it can be of any type - not just int. In practice this is mostly a documentation change because the int type is never enforced, except for Exception and Error constructors.

Throwables' codes are normally not needed, and even if they were, numeric ones aren't comfortable to work with. Allowing any type can open up to new possibilities for this property that is currently almost useless, like Enum/EnumSet-like objects, strings, etc.

Specifically, the following members are proposed to be modified:

  • Throwable::getCode(): mixed;
  • Error::__construct(string $message = “”, mixed $code = 0, Throwable $previous = null);
  • Exception::__construct(string $message = “”, mixed $code = 0, Throwable $previous = null);
  • protected mixed Error::$code;
  • protected mixed Exception::$code;

Backward Incompatible Changes

None.

Proposed PHP Version(s)

7.2

Voting

2/3 majority is required. Voting will end on 27th of Jan.

Accept Throwables error code generalization?
Real name Yes No
aharvey  
andrey  
ashnazg  
bishop  
bwoebi  
danack  
dm  
galvao  
guilhermeblanco  
hywan  
krakjoe  
lcobucci  
leigh  
marcio  
mariano  
mightyuhu  
mike  
nikic  
ocramius  
pollita  
stas  
tpunt  
yohgaki  
zimt  
Final result: 13 11
This poll has been closed.

Patches and Tests

N/A

References

rfc/throwable-code-generalization.txt · Last modified: by 127.0.0.1