我最近将一个正在运行的codeigniter项目移动到一台新服务器,来自同一控制器的许多页面都失败了。我追溯到这一行
$card['id'] = 00086;
打破整个文件
$card['id'] = "00086";
很好,但是作为字符串
$card['id'] = (int)"00086";
有效,但为什么?
$card['id'] = 86;
有效,但为什么?
是否有我不熟悉的服务器设置? 我甚至不在线的功能中,它在它之后打破了一切。
答案 0 :(得分:3)
这是因为由于前导零,php试图将该数字解释为八进制数。例如
$a = 08;
var_dump($a);
会抛出错误,因为08
不是有效的八进制数,而是
$a = 07;
var_dump($a);
不会抛出错误,因为它是一个有效的八进制数。
$a = 0071;
var_dump($a);
将生成int(57)
因为71
为八进制,转换为十进制的57
。
要使用八进制表示法,请在数字前面加上0(零)。使用 十六进制表示法在数字前面加上0x。要使用二进制 符号前面带有0b的数字。
顺便说一句,(int)"0086"
有效,因为php首先遇到0086
字符串然后将其转换为整数,因此在这种情况下数字变为86
。 $var = 86
的作用很简单,因为它是一个有效的十进制数。