First PHP parses your integer value as float, because of an integer overflow. Then it uses is_int() to determine if what PHP has parsed is an integer. See example #3 for 64-bit systems.
Please note that is_int() does work with unsigned integers as well.
Using 32-bit PHP 7:
echo PHP_INT_MIN; // -2147483648
echo var_dump(is_int(-2147483648)); // bool(false)
echo var_dump(is_int(-2147483647)); // bool(true)
To make sure PHP_INT_MIN is off by one, please try this on your 64-bit PHP 7:
echo var_dump(is_int(-9223372036854775807)); // bool(true)?
If you need more integer precision, you could use the GMP extension.