2013-02-20 18 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开始,会发出解析错误。