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| Parametro | Descrizione |
|---|---|
$value | La 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, usareintval()oppure il cast(int).
Esempio di base
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()—truesia per le stringhe numeriche che per i numeri ("42",42,3.14).ctype_digit()—truesolo per le stringhe composte interamente da cifre.- Validazione con filtro —
filter_var($value, FILTER_VALIDATE_INT)restituisce l'intero oppurefalse.
<?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
is_float()— verifica il tipo float.is_string()— verifica il tipo string.is_bool()— verifica il tipo boolean.is_array()— verifica il tipo array.is_numeric()— verifica se è un numero o una stringa numerica.gettype()— restituisce il nome del tipo come stringa.intval()— converte un valore in intero.
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.