2017-05-12 14 views
1

最小整数。在上PHP 7(64位的Ubuntu)交互模式下,在PHP 7

php > echo true; 
1 
php > echo false; # no output for false 
php > echo PHP_INT_MIN == -9223372036854775808; 
1 
php > echo is_int(PHP_INT_MIN); 
1 
php > echo is_int(-9223372036854775808); 

为什么不是最后一行输出1?

+0

添加一些更多的信息 –

+0

好回声PHP_INT_MIN === -9223372036854775808;是错误的。尽管如此,回声PHP_INT_MIN;显示-9223372036854775808和echo is_int(-9223372036854775808);是假 – zuggy

+0

对不起,我不知道为什么被PHP_INT_MIN显示的值不会出现与is_int检查() – zuggy

回答

3

var_dump()是你的朋友。

var_dump(
    PHP_INT_MIN, 
    is_int(PHP_INT_MIN), 
    -9223372036854775808, 
    is_int(-9223372036854775808) 
); 

/* Output: 
int(-9223372036854775808) 
bool(true) 
float(-9.2233720368548E+18) 
bool(false) 
*/ 
2

因为is_int

perates登录方式,没有签名,并受限于环境PHP的字大小在运行

等-9223372036854775808它。比约束

+0

感谢您指出了这一点,当是一个整数。会接受这个作为一个答案如果我不这样做的话 – zuggy

+0

笑那么PHP的最低整数不是整数? –

+0

您从PHP.net注释中引用的注释在PHP7中对我来说看起来无效,因为可以对整数进行签名。 (查看我的回答) – Code4R7

2

首先PHP系统字小解析,因为一个整数溢出你的整数值为float。然后它使用is_int()来确定PHP解析的是否为integer。请参阅64位系统的示例3。

请注意,is_int()不与无符号整数正常工作。 使用32位PHP 7:

echo PHP_INT_MIN;     // -2147483648 
echo var_dump(is_int(-2147483648)); // bool(false) 
echo var_dump(is_int(-2147483647)); // bool(true) 

为了确保PHP_INT_MIN是关闭的一个,请尽量将你的64位PHP 7:

echo var_dump(is_int(-9223372036854775807)); // bool(true)? 

如果您需要更多的整数的精度,可以使用GMP extension