2013-02-20 53 views
2

我有一些整數的PHP代碼,所有工作正常,除非我有080X整數。當我把它們放在報價中時,它一切正常。具有前導零的數字的奇怪行爲

例編號:

2  //Works fine 
08  //Doesn't work 
012 //Doesn't work 
"08" //Works fine again 
"012" //Works fine again 

誰能告訴我,這背後的原因是什麼?

+0

0前面的數字被認爲是PHP的八進制數。 – 2013-02-20 13:33:40

+5

建議您閱讀有關如何獲取一個月中的天數以及如何使用循環以及如何使用整數 – 2013-02-20 13:37:13

+1

我同意。非常低效的代碼http://stackoverflow.com/questions/1686724/php-last-day-of-the-month – mplungjan 2013-02-20 13:38:38

回答

11

如果你只是寫08和09(不帶引號)或任何其他帶前導0的數字,PHP認爲你正在寫一個八進制值,08和09是無效的八進制數。

http://www.php.net/manual/en/language.types.integer.php

語法

整數可以用十進制來指定(底爲10),十六進制(基數16), 八進制(基數8)或二進制(基數爲2)表示法中,任選前面有一個 符號( - 或+)。

二進制整數文字自PHP 5.4.0起可用。

要使用八進制表示法,在數字前加上(零)。要使用 十六進制表示法前面的數字爲0x。要使用二進制 表示法前面的數字與0b

[...]

警告: 之前PHP 7,如果一個無效位在一個八進制整數給出(即8或9),數字的其餘部分被忽略。從PHP 7開始,會發出解析錯誤。