我有以下错误,同时运行下面这段代码:解析错误:无效的数字文字
代码:
<?php
$a = array(00001, 00008, 00009, 00012);
print_r($a);
?>
错误:
Parse error: Invalid numeric literal.
为什么发生这个问题我该如何解决这个问题?
我有以下错误,同时运行下面这段代码:解析错误:无效的数字文字
代码:
<?php
$a = array(00001, 00008, 00009, 00012);
print_r($a);
?>
错误:
Parse error: Invalid numeric literal.
为什么发生这个问题我该如何解决这个问题?
这来自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-7)8位数字的上限开始。由于stated in the PHP manual,他们现在(7.x),而不是静静地丢弃无效数字产生上述警告。
你为什么要这样写数字?如果前导零有意义,那么它不是一个数字,而是一个字符串。如果您需要对这些数据进行计算,就好像它们是数字一样,那么在将值输出到客户端时需要添加前导零。
这可以用printf()
或sprintf()
这样进行:
$number = 5;
printf ("%05$1d", $number);
有时一个明显有效的数字文字被检测为无效的数字文字。
这是因为php5.4
回归可以通过阵列改变要解决这个问题:
$a =array(1,8,9,12);
$a = array('0001','0008','0009','0012'); //alternative method for fix
我已经尝试过了上[PHPFiddle](HTTP ://phpfiddle.org/),它工作的很好... –
@ d.coder在PHP7中试试看看会发生什么...... ;-) – Qirel
是的,它显示PHP 7中的错误,但不是PHP 5中的错误 –