W3docs

is_int()

A função is_int() é uma função nativa do PHP que verifica se uma variável é do tipo inteiro ou não.

Introdução

A função is_int() é uma função nativa do PHP que informa se uma variável é do tipo inteiro. Um inteiro é um número sem parte decimal, como -7, 0 ou 42.

A palavra-chave é tipo: is_int() analisa como o valor está armazenado na memória, não como ele aparenta ser. A string "42" e o float 42.0 parecem inteiros para um humano, mas para o PHP são uma string e um float, portanto is_int() retorna false para ambos. É isso que torna a função útil para validação estrita, e também o que costuma surpreender as pessoas.

is_int() possui dois aliases idênticos — is_integer() e is_long() — que você pode encontrar em código mais antigo. Prefira is_int() em código novo.

Sintaxe

is_int(mixed $value): bool
ParâmetroDescrição
$valueA variável a ser testada.

Valor de retorno: true se $value for do tipo int, caso contrário false.

Nota: is_int() nunca converte o valor nem lança um erro — ela apenas inspeciona o tipo existente. Para converter um valor em inteiro, use intval() ou um cast (int).

Exemplo básico

php— editable, runs on the server

Aqui $var1 contém um inteiro, então is_int() retorna true. $var2 é uma string, portanto retorna false.

Usamos var_dump() em vez de echo intencionalmente. Quando você usa echo em um boolean, true é impresso como "1" e false como uma string vazia — então echo is_int($var2) não exibe nada, o que é fácil de interpretar errado. var_dump() imprime o tipo e o valor explicitamente, tornando o resultado inequívoco.

O que conta como inteiro (e o que não conta)

A surpresa mais comum é que um número escrito entre aspas é uma string, não um inteiro:

<?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)
?>

Observe 42.0: não tem parte fracionária, mas é armazenado como float, então is_int() retorna false. Se você quer saber "é um número inteiro independentemente do tipo", é necessária uma verificação diferente (veja abaixo).

Atenção: overflow de inteiro vira float

Inteiros em PHP têm um tamanho máximo (PHP_INT_MAX). Quando um cálculo ultrapassa esse limite, o PHP converte silenciosamente o resultado para float, e is_int() passa a retornar false:

<?php
var_dump(is_int(PHP_INT_MAX));     // bool(true)
var_dump(is_int(PHP_INT_MAX + 1)); // bool(false) — overflowed to float
?>

Isso importa ao validar números fornecidos pelo usuário que podem ser muito grandes.

Verificando strings numéricas

Se o seu valor vem de um formulário, uma URL ou um banco de dados, quase sempre será uma string — então is_int() retornará false mesmo para "42". Nesses casos, normalmente você vai querer uma dessas alternativas:

  • is_numeric()true tanto para strings numéricas quanto para números ("42", 42, 3.14).
  • ctype_digit()true apenas para strings compostas inteiramente de dígitos.
  • Validação com filtro — filter_var($value, FILTER_VALIDATE_INT) retorna o inteiro ou 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)
?>

Quando usar

Use is_int() quando precisar de uma garantia estrita de tipo — por exemplo, para confirmar que um valor interno é genuinamente um inteiro antes de usá-lo como índice de array, limite de laço ou argumento para código que assume inteiros:

<?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 validação de entrada bruta, prefira is_numeric() ou filter_var(), depois converta para int.

Funções relacionadas

Conclusão

is_int() verifica se uma variável está armazenada como inteiro, não se apenas parece um. Lembre-se dos detalhes: números entre aspas são strings, floats com valor inteiro como 42.0 são floats, e inteiros que ultrapassam PHP_INT_MAX se tornam floats. Use is_int() para verificações estritas de tipo internas, e is_numeric() ou filter_var() ao validar strings de usuários.

Prática

Prática
Qual(is) das afirmações a seguir é/são verdadeira(s) sobre a função is_int() no PHP?
Qual(is) das afirmações a seguir é/são verdadeira(s) sobre a função is_int() no PHP?
Was this page helpful?