W3docs

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ámetroDescripción
$valueLa 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, usa intval() o el cast (int).

Ejemplo básico

php— editable, runs on the server

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()true tanto para cadenas numéricas como para números ("42", 42, 3.14).
  • ctype_digit()true solo para cadenas formadas enteramente por dígitos.
  • Validación con filtros — filter_var($value, FILTER_VALIDATE_INT) devuelve el entero o false.
<?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

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.

Práctica

Práctica
¿Cuál o cuáles de las siguientes afirmaciones son verdaderas sobre la función is_int() en PHP?
¿Cuál o cuáles de las siguientes afirmaciones son verdaderas sobre la función is_int() en PHP?
Was this page helpful?