2016-11-22 5 views
6

Ich habe folgende Fehler während diesen Code unten ausgeführt wird:Parse error: Ungültige Zahlenliteral

Code:

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

Fehler:

Parse error: Invalid numeric literal.

Warum dieses Problem aufgetreten und wie löse ich das?

+0

Ich habe es versucht, auf [PHPFiddle] (http : //phpfiddle.org/) und es funktionierte gut ... –

+0

@ d.coder Probieren Sie es in PHP7 aus und sehen Sie, was passiert ... ;-) – Qirel

+0

Ja, es zeigt Fehler in PHP 7, aber nicht in PHP 5 –

Antwort

9

Dies kommt von den Änderungen, die vorgenommen wurden, wie Integer, speziell Oktals, in PHP7 behandelt werden (wie PHP5).

Aus der Dokumentation (von Migration 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.

Aus der Dokumentation von ganzen Zahlen

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.

Entweder sie als Strings verwenden oder tatsächlichen Zahlen

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

Dies liegt daran, dass alle Zahlen mit 0 gilt Oktalwerte beginnend, die eine obere Grenze von 8 Stellen pro Position hat (0-7). Wie stated in the PHP manual, anstatt die ungültigen Ziffern still zu legen, erzeugen sie jetzt (7.x) die obige Warnung.

Warum schreiben Sie Ihre Zahlen so? Wenn die führenden Nullen signifikant sind, handelt es sich nicht um eine Zahl, die Sie haben, sondern um eine Zeichenfolge. Wenn Sie Berechnungen an diesen vornehmen müssen, als wären sie Zahlen, müssen Sie die führenden Nullen hinzufügen, wenn Sie die Werte an den Client ausgeben.

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

Bitte see the manual for more examples:
Dies kann mit printf() oder sprintf() wie dies getan werden.

0

Manchmal wird ein scheinbar gültiges numerisches Literal als ungültiges numerisches Literal erkannt.

Dies ist eine Regression seit php5.4

Sie dies durch Ändern der Array beheben können:

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

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

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

Verwandte Themen