2016-11-22 2 views
6

У меня есть следующее сообщение об ошибке во время выполнения этого кода ниже:Ошибка синтаксического анализа: Invalid числовой литерал

Код:

<?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 считаются восьмеричными значениями, которая имеет верхний предел 8 цифр в положение (0-7). Как 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

Смежные вопросы