The is_int() function checks whether a variable is of integer type. It returns true if the variable is an integer, and false otherwise. In PHP, integers are numbers without decimal parts, such as 42 or -10.
var_dump(is_int(42)); // true
var_dump(is_int('42')); // false
var_dump(is_int(42.0)); // false
In the example above, is_int() works as expected: the number 42 is recognized as an integer, while the string '42' and the floating-point number 42.0 are not considered integers.
In PHP, we often encounter numeric strings (such as '42') as input and attempt to check whether they are integers. Using is_int() to check strings leads to errors, because is_int() only returns true for actual integers, not for numeric strings.
var_dump(is_int('42')); // false
var_dump(is_int('0')); // false
var_dump(is_int('123abc')); // false
Even though '42' looks like an integer, it is actually a string, so is_int() returns false.
PHP automatically converts certain types to other types. For example, when performing arithmetic operations on a numeric string, PHP will convert it to an integer. However, this does not mean that the string itself is of integer type.
$var = '42';
echo $var + 1; // 43, automatically converted to integer and calculated
However, if you use is_int() to check it, the result will still be false, because is_int() checks the variable's type, not whether its value can be converted to an integer.
Another common pitfall is using strings containing numbers as input and mistakenly assuming they are integers. For example, '42' and ' 42 ' (a string with spaces) are not integer types.
var_dump(is_int('42')); // false
var_dump(is_int(' 42 ')); // false
Even though '42' is a numeric string, it is still a string type, not an integer type. This mismatch can cause logical errors in your program.
If your goal is to check whether a string represents a number, rather than just checking if it's an integer, the is_numeric() function may be a better option. is_numeric() returns true if the variable is a number or a numeric string.
var_dump(is_numeric('42')); // true
var_dump(is_numeric('42.5')); // true
var_dump(is_numeric('0')); // true
var_dump(is_numeric('abc')); // false
By using is_numeric(), you can avoid the limitations of is_int() when dealing with numeric strings, especially when checking user input or external data.
If you really need to check whether a string can be safely converted to an integer, consider using the intval() function, which converts a string to an integer, or combine regular expressions for stricter checks.
$var = '42';
if (intval($var) == $var) {
echo "$var is a string that can be converted to an integer";
} else {
echo "$var is not a valid integer";
}
Alternatively:
$var = '42';
if (preg_match('/^\d+$/', $var)) {
echo "$var is a numeric string";
} else {
echo "$var is not a numeric string";
}
This method can avoid directly relying on is_int() for handling numeric strings.