PHP 7.4: Underscore numeric separator
A simple, yet well thought-out change in PHP 7.4 is the numeric literal separator.
We are used to read numbers when they are grouped. For example, 1,000,000 is easier to subitize than 1000000. With numeric literal separator support in PHP, you can now use numbers in PHP like this:
$num = 1_000_000;
Prior to PHP 7.4, trying above would result in a syntax error:
Parse error: syntax error, unexpected '_000_000' (T_STRING) in ... on line ...
PHP engine removes the underscores when lexing.
Support for all numeric notations
You can use the underscore pattern in all PHP numeric notations.
- Decimal:
1_000_000 - Scientific:
6.62_607_004e-34 - Float:
0.300_000_000_000_000_04 - Binary:
0b1111_0000_1001_1111_1001_0010_1010_1001 - Octal:
0123_7264 - Hex:
0xBEEF_BABE
Disallowed patterns
The RFC also mentions the patterns that are not allowed:
- Two or more underscores:
1__6 - Underscores before and after the number:
_16and16_ - Underscore around the decimal point:
1_.6or1._6 - Underscore around the
ein scientific notation:1.6_e-28or1.6e_-28 - Underscore around the
bin binary notation:0_b01010or0b_010101 - Underscore around the
xin hex notation:0_xf00dor0x_food
Backwards compatibility
Because the underscore separator would have thrown a syntax error in versions prior 7.4, all existing code should work without any problems. It is not possible to polyfill this behavior, so if you plan to use this feature, keep in mind that you will need to bump your minimum PHP version to 7.4.