is_int()
La función is_int() de PHP comprueba si una variable es de tipo entero. Aprende su sintaxis, casos de uso y diferencias con is_numeric().
Introducción
La función is_int() es una función integrada de PHP que informa si una variable es de tipo entero. Un entero es un número sin parte decimal, como -7, 0 o 42.
La palabra clave es tipo: is_int() examina cómo está almacenado el valor en memoria, no cómo se ve. La cadena "42" y el float 42.0 ambos parecen enteros a simple vista, pero para PHP son una cadena y un float, por lo que is_int() devuelve false para ambos. Esto es lo que hace útil a la función para la validación estricta, y también lo que más confunde a la gente.
is_int() tiene dos alias idénticos — is_integer() e is_long() — que se pueden ver en código antiguo. En código nuevo, es preferible usar is_int().
Sintaxis
is_int(mixed $value): bool| Parámetro | Descripción |
|---|---|
$value | La variable a comprobar. |
Valor de retorno: true si $value es de tipo int, de lo contrario false.
Nota:
is_int()nunca convierte el valor ni genera un error — solo inspecciona el tipo existente. Para convertir un valor a entero, usaintval()o el cast(int).
Ejemplo básico
Aquí $var1 contiene un entero, por lo que is_int() devuelve true. $var2 es una cadena, por lo que devuelve false.
Usamos var_dump() en lugar de echo intencionalmente. Cuando se usa echo con un booleano, true se imprime como "1" y false se imprime como una cadena vacía — así que echo is_int($var2) no muestra nada, lo que puede interpretarse mal. var_dump() imprime el tipo y el valor de forma explícita, haciendo el resultado inequívoco.
Qué cuenta como entero (y qué no)
La sorpresa más común es que un número escrito entre comillas es una cadena, no un entero:
<?php
var_dump(is_int(42)); // bool(true) — integer literal
var_dump(is_int("42")); // bool(false) — numeric string, not an int
var_dump(is_int(42.0)); // bool(false) — float, even though it has no fraction
var_dump(is_int(0x1A)); // bool(true) — hex literal 26 is still an int
var_dump(is_int(true)); // bool(false) — a bool is not an int
var_dump(is_int(null)); // bool(false)
?>Fíjate en 42.0: no tiene parte fraccionaria, pero se almacena como float, por lo que is_int() es false. Si quieres "¿es este un número entero independientemente del tipo?", necesitas una comprobación diferente (ver más abajo).
Cuidado: el desbordamiento de enteros se convierte en float
Los enteros de PHP tienen un tamaño máximo (PHP_INT_MAX). Cuando un cálculo lo supera, PHP convierte silenciosamente el resultado a float, y is_int() devuelve false:
<?php
var_dump(is_int(PHP_INT_MAX)); // bool(true)
var_dump(is_int(PHP_INT_MAX + 1)); // bool(false) — overflowed to float
?>Esto importa al validar números proporcionados por el usuario que podrían ser muy grandes.
Comprobar cadenas numéricas en su lugar
Si tu valor proviene de un formulario, una URL o una base de datos, casi siempre será una cadena — por lo que is_int() devolverá false incluso para "42". En esos casos normalmente querrás una de estas alternativas:
is_numeric()—truetanto para cadenas numéricas como para números ("42",42,3.14).ctype_digit()—truesolo para cadenas formadas enteramente por dígitos.- Validación con filtros —
filter_var($value, FILTER_VALIDATE_INT)devuelve el entero ofalse.
<?php
$fromForm = "42"; // string, as form input always is
var_dump(is_int($fromForm)); // bool(false)
var_dump(filter_var($fromForm, FILTER_VALIDATE_INT)); // int(42)
?>Cuándo usarla
Usa is_int() cuando necesites una garantía estricta de tipo — por ejemplo, para confirmar que un valor interno es genuinamente un entero antes de usarlo como índice de array, límite de bucle o argumento para código que asume enteros:
<?php
function repeat(string $text, int $times): string
{
// Defensive guard: reject anything that isn't a real int.
if (!is_int($times) || $times < 0) {
return $text;
}
return str_repeat($text, $times);
}
echo repeat("ab", 3) . "\n"; // ababab
?>Para la validación de datos externos, usa is_numeric() o filter_var() en su lugar, y luego convierte a int.
Funciones relacionadas
is_float()— comprueba el tipo float.is_string()— comprueba el tipo string.is_bool()— comprueba el tipo boolean.is_array()— comprueba el tipo array.is_numeric()— comprueba si es un número o una cadena numérica.gettype()— obtiene el nombre del tipo como cadena.intval()— convierte un valor a entero.
Conclusión
is_int() comprueba si una variable está almacenada como entero, no si simplemente parece uno. Recuerda los casos especiales: los números entre comillas son cadenas, los floats con valor entero como 42.0 son floats, y los enteros que superan PHP_INT_MAX se convierten en floats. Usa is_int() para comprobaciones estrictas de tipo interno, e is_numeric() o filter_var() al validar cadenas de los usuarios.