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.1077 === 63; // true
077 === 0o77; // true
077 === 0O77; // true此外,以 0o/0o为前缀的数字文字也支持下划线数字分隔符:
echo 0o7716_1412; // 165731940 前缀没有修改
现有的 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 ...