Forget about a case of checking
016 == 16 causing a false response, from now on any octal integer will have to be written in literal notation, which is
0o16 . This only applies to integer types, strings behavior are kept intact.
New support for the explicit octal notation
0O for integer literals analogous to
0B for hexadecimal and binary.
0o16 === 14; // true 0o123 === 83; // true 0O16 === 14; // true 0O123 === 83; // true 016 === 0o16; // true 016 === 0O16; // true
As of PHP 7.0, hexadecimal numbers in strings are not considered numeric, as the behavior was inconsistent with type casting. Adding complete support for hex numbers in strings was rejected because adding it for other numeric types would be complex and confusing.
Numeric strings in PHP are always decimal. Analogous to the example from the introduction
"016" == 016 evaluates to false as
(int) "016" evaluates to
This change has no impact on the behavior of numeric strings.
“0o16” would still be interpreted as a string and only a string. Moreover,
(int) "0o16" will continue to evaluate to