Wes @WesNetmo on Twitter

Wes @WesNetmo on Twitter


PHP RFC: Throwable error code's type generalization


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.


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


Proposed PHP Version(s)


Patches and Tests




An option needs 2/3 votes to win

Accept Throwables error code generalization? (54.2% approved)
User Vote
aharvey No
andrey Yes
ashnazg Yes
bishop Yes
bwoebi Yes
danack No
dm Yes
galvao No
guilhermeblanco No
hywan No
krakjoe Yes
lcobucci No
leigh No
marcio Yes
mariano Yes
mightyuhu No
mike Yes
nikic Yes
ocramius No
pollita Yes
stas Yes
tpunt No
yohgaki Yes
zimt No