W3docs

is_int()

La funzione is_int() è una funzione integrata di PHP che verifica se una variabile è di tipo intero o meno.

Introduzione

La funzione is_int() è una funzione integrata di PHP che indica se una variabile è di tipo intero. Un intero è un numero intero (senza parte decimale) come -7, 0 o 42.

La parola chiave è tipo: is_int() analizza come il valore è memorizzato in memoria, non come appare. La stringa "42" e il float 42.0 sembrano entrambi interi a un essere umano, ma per PHP sono una stringa e un float, quindi is_int() restituisce false per entrambi. Questo è ciò che rende la funzione utile per la validazione rigorosa, ed è anche ciò che confonde maggiormente le persone.

is_int() ha due alias identici — is_integer() e is_long() — che si possono trovare nel codice più vecchio. Preferire is_int() nel nuovo codice.

Sintassi

is_int(mixed $value): bool
ParametroDescrizione
$valueLa variabile da testare.

Valore restituito: true se $value è di tipo int, altrimenti false.

Nota: is_int() non converte mai il valore né genera errori — si limita a ispezionare il tipo esistente. Per convertire un valore in intero, usare intval() oppure il cast (int).

Esempio di base

php— editable, runs on the server

Qui $var1 contiene un intero, quindi is_int() restituisce true. $var2 è una stringa, quindi restituisce false.

Usiamo var_dump() invece di echo intenzionalmente. Quando si usa echo con un boolean, true viene stampato come "1" e false viene stampato come stringa vuota — quindi echo is_int($var2) non mostra nulla, il che è facile da fraintendere. var_dump() stampa il tipo e il valore esplicitamente, rendendo il risultato inequivocabile.

Cosa conta come intero (e cosa no)

La sorpresa più comune è che un numero scritto tra virgolette è una stringa, non un intero:

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

Si noti 42.0: non ha parte frazionaria, ma è memorizzato come float, quindi is_int() è false. Se si vuole verificare "è un numero intero indipendentemente dal tipo", è necessario un controllo diverso (vedere sotto).

Attenzione: l'overflow degli interi diventa un float

Gli interi PHP hanno una dimensione massima (PHP_INT_MAX). Quando un calcolo la supera, PHP converte silenziosamente il risultato in float, e is_int() restituisce quindi false:

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

Questo è importante quando si validano numeri forniti dall'utente che potrebbero essere molto grandi.

Verifica delle stringhe numeriche

Se il valore proviene da un modulo, un URL o un database, è quasi sempre una stringa — quindi is_int() restituirà false anche per "42". In questi casi di solito si preferisce uno di questi approcci:

  • is_numeric()true sia per le stringhe numeriche che per i numeri ("42", 42, 3.14).
  • ctype_digit()true solo per le stringhe composte interamente da cifre.
  • Validazione con filtro — filter_var($value, FILTER_VALIDATE_INT) restituisce l'intero oppure 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 usarla

Usare is_int() quando si ha bisogno di una garanzia di tipo rigorosa — ad esempio, per confermare che un valore interno sia genuinamente un intero prima di usarlo come indice di array, limite di ciclo, o argomento per codice che presuppone interi:

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

Per la validazione dell'input grezzo, usare invece is_numeric() o filter_var(), poi eseguire il cast a int.

Funzioni correlate

Conclusione

is_int() verifica se una variabile è memorizzata come intero, non se sembra semplicemente tale. Ricordare le insidie: i numeri tra virgolette sono stringhe, i float con valore intero come 42.0 sono float, e gli interi che superano PHP_INT_MAX diventano float. Usare is_int() per controlli di tipo rigorosi interni, e is_numeric() o filter_var() per la validazione delle stringhe degli utenti.

Pratica

Pratica
Quale/i delle seguenti affermazioni è/sono vera/e riguardo alla funzione is_int() in PHP?
Quale/i delle seguenti affermazioni è/sono vera/e riguardo alla funzione is_int() in PHP?
Was this page helpful?