解析错误:无效的数字文字

Ran*_*osh 15 php arrays octal php-7

运行以下代码时出现以下错误:

码:

<?php
    $a = array(00001, 00008, 00009, 00012);
    print_r($a);
?>
Run Code Online (Sandbox Code Playgroud)

错误:

解析错误:无效的数字文字.

为什么会出现这个问题,我该如何解决?

Qir*_*rel 21

这来自对PHP7中处理整数(特别是八进制)的更改(与PHP5相比).

从文档(从PHP7迁移)

无效的八进制文字

以前,包含无效数字的八进制文字被静默截断(0128被视为012).现在,无效的八进制文字将导致解析错误.

从整数的文档

在PHP 7之前,如果在八进制整数(即8或9)中给出了无效数字,则忽略该数字的其余部分.从PHP 7开始,会发出解析错误.

将它们用作字符串或实际整数

$a = array(1, 8, 9, 12); // Integers
$a = array("00001", "00008", "00009", "00012"); // Strings
Run Code Online (Sandbox Code Playgroud)


Chr*_*anF 6

这是因为所有以 0 开头的数字都被视为八进制值,每个位置 (0-7) 的上限为 8 位。正如PHP 手册中所述,现在(7.x)不会默默地删除无效数字,而是会产生上述警告。

你为什么要这样写你的数字?如果前导零很重要,那么它不是一个数字,而是一个字符串。如果您需要像数字一样对这些进行计算,那么您需要在将值输出到客户端时添加前导零。这可以通过以下方式
完成:printf()sprintf()

$number = 5;
printf ("%05$1d", $number);
Run Code Online (Sandbox Code Playgroud)

参阅手册以获取更多示例