PHP 8.1: 显式八进制数字表示法
PHP 支持多种数字系统,包括默认的十进制数字、二进制数字、八进制数字及十六进制数。
十进制之外的数字系统都有它们自己的前缀:
- 十六进制
0x
前缀: e.g.0x11
= 17 - 二进制
0b
前缀: e.g.0b11
= 3 - 八进制
0
前缀: e.g.011
= 9
PHP 8.1 之后,八进制也支持 0o
(零及字母o)前缀,这意味着八进制字面量可以更明显及可读。也支持 0O
(大写字母O)。
许多编程语法使用
0
作为八进制字面量的前缀,比如 PHP。不过,许多语言也支持显式0o
并推荐使用0o
。
echo 0xff; // 255
echo 0b111; // 7
echo 77; // 77
echo 077; // 63
echo 0o77; // 63, In PHP 8.1
echo 0O77; // 63, In PHP 8.1
077 === 63; // true
077 === 0o77; // true
077 === 0O77; // true
此外,以 0o
/0o
为前缀的数字文字也支持下划线数字分隔符:
echo 0o7716_1412; // 16573194
0
前缀没有修改
现有的 0
前缀没有被弃用,还和以前一样。
除了现有的 0
前缀,还额外支持 0o
/0O
前缀。
数字字符串没有改变
数字字符串,如包含数字的字符串,不受此影响。"0o16"
(作为字符串) 不会被解释为数字,也不会在 is_numeric
函数中返回 true
。
echo "016"; // "016"
is_numeric("0o77"); // false
is_numeric("0b11"); // false
is_numeric("0x16"); // false
注意 "016"
在 is_numeric
中返回 true
,这也没改变:
is_numeric("016"); // true
向后兼容性影响
0o
和 0O
前缀是新的前缀,在旧版本 PHP 中不支持。在旧版中使用会导致语法错误:
$value = 0o77;
Parse error: syntax error, unexpected identifier "o77" in ... on line ...