奇怪的PHP行为:不会将整数8赋给变量

Dav*_*vid 0 php variables debugging

我想我刚刚遇到了我在短暂的开发人员生活中遇到过的最奇怪的'bug'.好像我只是不能将值8赋值给任何变量.举个例子:

<?php
$seven = 07;
$eight = 08; //what's wrong here?
$sevenB = 7;
$eightB = 8;

echo $seven;
echo $eight;
echo $sevenB;
echo $eightB;
?>
Run Code Online (Sandbox Code Playgroud)

输出是:

7078
Run Code Online (Sandbox Code Playgroud)

NetBeans中的调试器告诉我0分配给$ 8,而其他变量都没问题.如果我在值之前删除了零,则会分配8个,但是只要在构造函数中使用此变量,它就会再次替换为零.WTF?

这是我的配置:WAMP 2.0g,PHP 5.2.9,Apache 2.2.11,NetBeans 6.7.1.禁用Xdebug(2.05)不会改变任何事情.

谁对这种不一致的行为负责?如何解决这个问题?

谢谢你的帮助!

小智 20

PHP将前面的0作为八进制处理.

Re:PHP:整数.


Dan*_*uis 9

在PHP中,以零开头的数字被认为是八进制.因为八进制(基数8)只有数字0-7,08无效并被视为零.

有关详细信息,请参阅本手册页,并注意语法部分中的警告:"如果以八进制整数(即8或9)给出无效数字,则忽略该数字的其余部分."

<?php
var_dump(01090); // 010 octal = 8 decimal
?>
Run Code Online (Sandbox Code Playgroud)


kni*_*ttl 6

如果你的数字前缀为零(0),它们将被解释为八进制数.7是最高的八进制数.十六进制数也有0x(最高15/F)

如何修复:只是不添加前缀0;)