数字具有前导零的奇怪行为

时间:2013-02-20 13:32:09

标签: php numbers integer octal

我有一些带有一些整数的PHP代码并且一切正常,除非我有080X作为整数。当我把它们引用时,一切正常。

示例数字:

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

谁能告诉我背后的原因?

1 个答案:

答案 0 :(得分:11)

如果您只是编写08和09(没有引号)或任何其他带前导0的数字,PHP认为您正在写一个八进制值,而08和09是无效的八进制数。

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

  

<强>语法

     

整数可以用十进制(基数10),十六进制(基数16)指定,   八进制(基数8)或二进制(基数2)表示法,可选地以a开头   标志( - 或+)。

     

自PHP 5.4.0起可以使用二进制整数文字。

     

要使用八进制表示法,请在数字前面加上 0 (零)。使用   十六进制表示法位于数字前面 0x 。要使用二进制文件   符号在数字前面加上 0b

     

[...]

     

警告:   在PHP 7之前,如果在八进制整数(即8或9)中给出无效数字,则忽略该数字的其余部分。从PHP 7开始,会发出一个解析错误。