带有前导零的数字表现出奇怪的行为

4

我有一些PHP代码,其中包含一些整数,除了当整数为080X时,就可以正常运行。如果将它们放在引号中,就可以正常工作。

例子数字:

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

有人能告诉我背后的原因吗?

PHP中,数字前面的0被视为八进制数。 - web-nomad
5
建议您了解如何获取一个月中的天数、如何使用循环以及如何使用整数。 - Mark Baker
1
我同意。这是非常低效的代码。https://dev59.com/MHI-5IYBdhLWcg3wwbdM - mplungjan
1个回答

13
如果你只是写下08和09(不用引号)或者带有前导0的任何其他数字,PHP会认为你在写一个八进制值,而08和09是无效的八进制数字。 http://www.php.net/manual/en/language.types.integer.php 语法 整数可以使用十进制(基数为10),十六进制(基数为16),八进制(基数为8)或二进制(基数为2)表示,可选择性地在前面加上符号(-或+)。
自 PHP 5.4.0 起可用二进制整数字面量。
要使用八进制表示法,请在数字前面加上0(零)。要使用十六进制表示法,请在数字前面加上0x。要使用二进制表示法,请在数字前面加上0b
[...] 警告: 在 PHP 7 之前,如果在八进制整数中给出了无效的数字(即 8 或 9),则其余部分将被忽略。自 PHP 7 起,将发出解析错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接