is_scalar()
PHP is_scalar() vérifie si une variable est un entier, un float, une chaîne ou un booléen. Renvoie false pour les tableaux, objets, NULL et ressources.
Introduction
is_scalar() est une fonction PHP intégrée qui permet de déterminer si une variable contient une valeur scalaire. Un scalaire est une valeur unique et atomique — une valeur qui n'est pas composée d'autres valeurs. PHP dispose exactement de quatre types scalaires :
- integer — les nombres entiers, par ex.
42 - float (double) — les nombres avec une décimale, par ex.
3.14 - string — le texte, par ex.
"hello" - boolean —
trueoufalse
Tout le reste est non-scalaire : les tableaux et les objets sont composés (ils regroupent plusieurs valeurs), tandis que les valeurs NULL et resource sont des types spéciaux pour lesquels is_scalar() renvoie délibérément false. Cette distinction est importante car les valeurs scalaires peuvent être affichées, concaténées ou stockées directement, tandis que les valeurs composées nécessitent généralement d'être parcourues ou inspectées au préalable.
Syntaxe
is_scalar(mixed $value): boolLa fonction prend un seul argument, $value, et renvoie true lorsqu'il s'agit d'un entier, d'un float, d'une chaîne ou d'un booléen, et false pour tout autre type — y compris les tableaux, les objets, NULL et les ressources.
Exemple d'utilisation
L'exemple suivant vérifie une variable de chaque type courant :
La chaîne, le float et le booléen sont tous des scalaires, donc ils renvoient true. Le tableau est un type composé, donc il renvoie false.
Conseil :
var_dump()est plus clair qu'echopour les résultats booléens. Avececho,trues'affiche comme1etfalses'affiche comme une chaîne vide, ce qui peut prêter à confusion. Consultez var_dump() pour en savoir plus.
NULL, les objets et les ressources ne sont pas des scalaires
Ces trois cas sont souvent source de confusion, car intuitivement ils semblent « simples », mais is_scalar() renvoie false pour chacun d'eux :
<?php
var_dump(is_scalar(null)); // bool(false) — NULL is its own type
var_dump(is_scalar(new stdClass())); // bool(false) — objects are compound
$handle = fopen("php://memory", "r");
var_dump(is_scalar($handle)); // bool(false) — a file resource
fclose($handle);
?>Si vous souhaitez également accepter NULL, vérifiez-le séparément : is_scalar($v) || is_null($v).
Utiliser is_scalar() comme garde-fou
Une utilisation courante est de vérifier si une valeur peut être affichée ou concaténée en toute sécurité. Les valeurs composées comme les tableaux ne peuvent pas être directement converties en chaîne (echo $array génère un avertissement), donc une vérification préalable permet d'éviter les erreurs :
<?php
function describe(mixed $value): string
{
if (is_scalar($value)) {
return "scalar value: $value";
}
return "non-scalar value of type " . gettype($value);
}
echo describe(42), "\n"; // scalar value: 42
echo describe([1, 2]), "\n"; // non-scalar value of type array
echo describe(null), "\n"; // non-scalar value of type NULL
?>Ici, gettype() indique le type exact des valeurs non-scalaires, tandis qu'is_scalar() permet d'afficher les valeurs imprimables sans risque.
is_scalar() vs les vérifications de type spécifiques
is_scalar() est pratique pour savoir si une valeur appartient à l'un quelconque des quatre types scalaires. Lorsque vous vous intéressez à un type précis, utilisez plutôt la fonction dédiée :
| Fonction | Renvoie true pour |
|---|---|
is_int() | les entiers uniquement |
is_float() | les floats uniquement |
is_string() | les chaînes uniquement |
is_bool() | les booléens uniquement |
is_scalar() | entier ou float ou chaîne ou booléen |
is_scalar() est équivalent à écrire is_int($v) || is_float($v) || is_string($v) || is_bool($v), mais c'est plus court et plus clair.
Conclusion
is_scalar() renvoie true uniquement pour les quatre types scalaires — entier, float, chaîne et booléen — et false pour les tableaux, objets, NULL et ressources. Cette fonction est surtout utile comme garde-fou avant d'afficher ou de concaténer une valeur dont vous n'êtes pas certain du type. Lorsque vous avez besoin de vérifier un type spécifique, utilisez is_int(), is_string() et leurs équivalents ; lorsque vous voulez simplement savoir « s'agit-il d'une valeur simple et unique ? », is_scalar() est l'outil approprié.