为什么下面的表达式结果为34?
它似乎与八进制数无关。
intval(042);
但是在许多语言中,前导0表示八进制,这也是此处的情况。
这与八进制数字有关,042
被解释为八进制数42
,即4 * 8 + 2 = 34
。
请注意,八进制解释发生在加载PHP脚本时解析数字文字时。这与intval()
无关,因为该值已经是整数。
只有当数字文字出现时才会发生八进制解释,而不是将字符串转换为整数时:
intval(042) // == 34
intval('042') // == 42
(int)'042' // == 42