2016-11-22 52 views
6

我有以下错误,同时运行下面这段代码:解析错误:无效的数字文字

代码:

<?php 
    $a = array(00001, 00008, 00009, 00012); 
    print_r($a); 
?> 

错误:

Parse error: Invalid numeric literal.

为什么发生这个问题我该如何解决这个问题?

+0

我已经尝试过了上[PHPFiddle](HTTP ://phpfiddle.org/),它工作的很好... –

+0

@ d.coder在PHP7中试试看看会发生什么...... ;-) – Qirel

+0

是的,它显示PHP 7中的错误,但不是PHP 5中的错误 –

回答

9

这来自PHP7中处理整数(特别是八进制数)的变化(如oppsoed到PHP5)。

从文档(从PHP7迁移)

Invalid octal literals

Previously, octal literals that contained invalid numbers were silently truncated (0128 was taken as 012). Now, an invalid octal literal will cause a parse error.

从整数

Prior to PHP 7, if an invalid digit was given in an octal integer (i.e. 8 or 9), the rest of the number was ignored. Since PHP 7, a parse error is emitted.

的文档既可以使用它们作为字符串或实际整数

$a = array(1, 8, 9, 12); // Integers 
$a = array("00001", "00008", "00009", "00012"); // Strings 
0

这是因为所有数字以0被认为是八进制值,其具有的每位置(0-7)8位数字的上限开始。由于stated in the PHP manual,他们现在(7.x),而不是静静地丢弃无效数字产生上述警告。

你为什么要这样写数字?如果前导零有意义,那么它不是一个数字,而是一个字符串。如果您需要对这些数据进行计算,就好像它们是数字一样,那么在将值输出到客户端时需要添加前导零。
这可以用printf()sprintf()这样进行:

$number = 5; 
printf ("%05$1d", $number); 

see the manual for more examples

0

有时一个明显有效的数字文字被检测为无效的数字文字。

这是因为php5.4

回归

可以通过阵列改变要解决这个问题:

$a =array(1,8,9,12); 

$a = array('0001','0008','0009','0012'); //alternative method for fix 

参考:https://bugs.php.net/bug.php?id=70193