一、整形
整形数字可以用十进制、十六进制、八进制、二进制表示。不过不推荐使用八进制,在各个版本使用了错误的八进制表示都会有不同的返回结果或错误提示。
注意,在官方文档中有一句话:“PHP 不支持无符号的 integer”。这句话的意思,在 PHP 中,任意的整形数字都是有符号的,正数的符号可以省略。即每个硬件即平台对应的整数应该是:-2^(n - 1) ~ (2^(n - 1) - 1)。所以在 32 (2147483647
)位平台下可能会有溢出的情况,64 (9223372036854775807
)位肯定也会有,但是没人会存储一个那么大的整形吧。
超出整形能表示的最大值,产生溢出,溢出为浮点型。
二、自动转换
//一、资源类型转换为整形,返回资源 id 号
//二、布尔值转换为整形
var_dump((int) true); //1
var_dump((int) false); //0
//三、浮点数转换为整形
var_dump((int) 1.23); //浮点数转换为整形相当于 floor($float); 1
var_dump((int) 2147483647.01); //超出整形最大值的浮点数转换为整形为“未定义”,没有警告、通知、输出
var_dump((int) nan);
var_dump((int) infinity); //PHP7.0开始,这两个情况下返回 0,之前版本和上述一样,“未定义”
//四、字符串转换为整形,字符串转换涉及到转换为整形和浮点型,这里之说整形
//规则是:当字符串字符串不包含“.”、“e”、“E” 并且数字值在整形范围内,则会被当做整形取值,其他任何情况都被当做浮点型取值
var_dump((int) '0123aaa'); //123
var_dump((int) '0x123aa'); //0
var_dump((int) '0b123aa'); //0
var_dump((int) '123a22b'); //123
注意上述的字符串转换中的第 2、3 个,虽然看起来是十六进制、八进制的表示,但是能被当做数字的仅仅是前面的 0。