2017-05-12 38 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