is_int()
La fonction is_int() en PHP vérifie si une variable est de type entier et renvoie true ou false selon le résultat.
Introduction
La fonction is_int() est une fonction intégrée de PHP qui indique si une variable est de type entier. Un entier est un nombre sans partie décimale, comme -7, 0 ou 42.
Le mot clé ici est type : is_int() examine la façon dont la valeur est stockée en mémoire, et non son apparence. La chaîne "42" et le float 42.0 ressemblent tous deux à des entiers pour un humain, mais pour PHP ce sont une chaîne et un float, donc is_int() retourne false dans les deux cas. C'est ce qui rend la fonction utile pour la validation stricte, et aussi ce qui piège le plus souvent les développeurs.
is_int() possède deux alias identiques — is_integer() et is_long() — que l'on peut rencontrer dans du code plus ancien. Préférez is_int() dans du nouveau code.
Syntaxe
is_int(mixed $value): bool| Paramètre | Description |
|---|---|
$value | La variable à tester. |
Valeur de retour : true si $value est de type int, sinon false.
Remarque :
is_int()ne convertit jamais la valeur et ne génère pas d'erreur — elle inspecte uniquement le type existant. Pour convertir une valeur en entier, utilisezintval()ou un cast(int).
Exemple de base
Ici, $var1 contient un entier, donc is_int() retourne true. $var2 est une chaîne, donc elle retourne false.
Nous utilisons var_dump() plutôt que echo intentionnellement. Quand vous utilisez echo avec un booléen, true s'affiche comme "1" et false s'affiche comme une chaîne vide — donc echo is_int($var2) ne montre rien du tout, ce qui est facile à mal interpréter. var_dump() affiche le type et la valeur explicitement, rendant le résultat sans ambiguïté.
Ce qui compte comme un entier (et ce qui n'en est pas un)
La surprise la plus fréquente est qu'un nombre écrit entre guillemets est une chaîne, pas un entier :
<?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)
?>Remarquez 42.0 : il n'a pas de partie fractionnaire, mais il est stocké comme un float, donc is_int() est false. Si vous souhaitez vérifier "est-ce un nombre entier indépendamment du type", vous avez besoin d'une vérification différente (voir ci-dessous).
Attention : le dépassement d'entier devient un float
Les entiers PHP ont une taille maximale (PHP_INT_MAX). Lorsqu'un calcul la dépasse, PHP convertit silencieusement le résultat en float, et is_int() retourne alors false :
<?php
var_dump(is_int(PHP_INT_MAX)); // bool(true)
var_dump(is_int(PHP_INT_MAX + 1)); // bool(false) — overflowed to float
?>Cela importe lors de la validation de nombres fournis par l'utilisateur qui pourraient être très grands.
Vérifier les chaînes numériques à la place
Si votre valeur provient d'un formulaire, d'une URL ou d'une base de données, c'est presque toujours une chaîne — donc is_int() retournera false même pour "42". Dans ces cas, vous voudrez généralement l'une de ces alternatives :
is_numeric()—truepour les chaînes numériques et les nombres ("42",42,3.14).ctype_digit()—trueuniquement pour les chaînes composées entièrement de chiffres.- Validation par filtre —
filter_var($value, FILTER_VALIDATE_INT)retourne l'entier oufalse.
<?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)
?>Quand l'utiliser
Utilisez is_int() quand vous avez besoin d'une garantie de type stricte — par exemple, pour confirmer qu'une valeur interne est véritablement un entier avant de l'utiliser comme index de tableau, comme borne de boucle, ou comme argument pour du code qui suppose des entiers :
<?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
?>Pour la validation des données brutes, utilisez plutôt is_numeric() ou filter_var(), puis castez en int.
Fonctions associées
is_float()— tester le type float.is_string()— tester le type string.is_bool()— tester le type boolean.is_array()— tester le type array.is_numeric()— tester si une valeur est un nombre ou une chaîne numérique.gettype()— obtenir le nom du type sous forme de chaîne.intval()— convertir une valeur en entier.
Conclusion
is_int() vérifie si une variable est stockée comme un entier, et non si elle ressemble simplement à un entier. Retenez les pièges : les nombres entre guillemets sont des chaînes, les floats à valeur entière comme 42.0 sont des floats, et les entiers qui dépassent PHP_INT_MAX deviennent des floats. Utilisez is_int() pour des vérifications de type internes strictes, et is_numeric() ou filter_var() lors de la validation de chaînes provenant des utilisateurs.