is_string()
La fonction is_string() est une fonction PHP intégrée qui vérifie si une variable est de type string ou non.
Introduction
is_string() est une fonction PHP intégrée qui vous indique si une valeur est de type string. Un string est un type de données qui contient une séquence de caractères, comme "hello" ou "42".
Étant donné que PHP est faiblement typé, le type d'une valeur dépend souvent de sa provenance — un formulaire, une base de données, un payload JSON ou la valeur de retour d'une fonction. is_string() vous permet de confirmer qu'une valeur est bien un string avant d'appeler des opérations réservées aux strings (comme strtoupper() ou substr()), afin d'éviter les erreurs de type et les résultats inattendus.
Cette page couvre la syntaxe, ce que is_string() retourne pour chaque type PHP, le piège classique des « chaînes numériques », et comment elle se distingue des fonctions apparentées comme is_numeric() et gettype().
Syntaxe
is_string(mixed $value): bool$value— la variable ou l'expression à tester.- Retourne —
truesi$valueest un string,falsepour tout autre type.
is_string() vérifie le type, pas le contenu. Elle n'inspecte qu'une seule valeur à la fois et ne la convertit jamais.
Exemple de base
$var1 est un string, donc is_string() retourne true ; $var2 est un float, donc elle retourne false.
Conseil : Utilisez
var_dump()plutôt queechopour tester des résultats booléens.echo trueaffiche1, maisecho falsen'affiche absolument rien — ce qui rend un résultatfalsefacile à manquer.var_dump()affiche explicitementbool(true)/bool(false).
Ce que is_string() retourne pour chaque type
Seuls les vrais strings passent la vérification — les nombres, les booléens, null et les arrays retournent tous false, même quand ils ressemblent à des strings.
<?php
var_dump(is_string("hello")); // bool(true)
var_dump(is_string("42")); // bool(true) — a digit string is still a string
var_dump(is_string(42)); // bool(false) — integer
var_dump(is_string(3.14)); // bool(false) — float
var_dump(is_string(true)); // bool(false) — boolean
var_dump(is_string(null)); // bool(false) — null
var_dump(is_string(['a', 'b'])); // bool(false) — array
?>L'essentiel à retenir : is_string("42") est true. Les guillemets en font un string de chiffres, pas un nombre.
Utilisation pratique : garde avant les opérations sur les strings
Une utilisation typique consiste à valider une valeur avant d'appliquer des fonctions de string, afin qu'une entrée non fiable ou de type mixte ne puisse pas déclencher une TypeError.
<?php
function shout($value): string {
if (!is_string($value)) {
return "Not a string";
}
return strtoupper($value) . "!";
}
echo shout("hello") . "\n"; // HELLO!
echo shout(123) . "\n"; // Not a string
?>is_string() vs. is_numeric()
Ces deux fonctions sont souvent confondues car les chaînes numériques se trouvent entre les deux. is_string() demande « est-ce de type string ? », tandis que is_numeric() demande « cette valeur représente-t-elle un nombre ? » — et une chaîne numérique répond oui aux deux.
<?php
$value = "42";
var_dump(is_string($value)); // bool(true) — it IS a string
var_dump(is_numeric($value)); // bool(true) — and it looks like a number
?>Si vous avez besoin d'un type entier ou float plutôt qu'un string, utilisez is_int() ou is_float(). Pour convertir une valeur en string plutôt que de simplement la vérifier, consultez settype() ou strval().
Conclusion
is_string() est une vérification de type simple et fiable : elle retourne true uniquement pour les valeurs genuinement de type string et false pour tout le reste. Faites-y appel chaque fois que vous devez vous assurer qu'une valeur est un string avant d'appliquer des opérations sur les strings — par exemple lors du traitement de saisies utilisateur, de réponses API ou de données dont le type n'est pas garanti. Rappelez-vous les deux pièges : un nombre entre guillemets comme "42" est un string, et vous devriez inspecter les résultats avec var_dump() plutôt qu'avec echo pour qu'un false ne disparaisse pas. Pour des vérifications connexes, explorez is_numeric(), is_int(), is_array() et gettype().