Pour convertir une valeur vers un autre type, placez le type entre parenthèses devant elle : (int) "42" donne l'entier 42. La forme fonction intval("42") fait la même chose. Un cast n'échoue jamais : un texte qui n'est pas un nombre devient 0, et une chaîne qui commence par des chiffres ne garde que ces chiffres.
Les casts disponibles en PHP sont (int), (float), (string), (bool), (array) et (object). Chacun a aussi une fonction : intval(), floatval(), strval(), boolval().
De string à int : ce que renvoient (int) et intval()
PHP lit les chiffres depuis le début de la chaîne, après avoir ignoré les espaces initiaux, et s'arrête au premier caractère qui ne peut pas faire partie d'un nombre. La notation avec exposant compte comme un nombre, pas un préfixe 0x.
Remarquez que "12.7" devient 12 : convertir en int coupe la partie décimale, cela n'arrondit pas. Ni (int) ni intval() n'affichent de warning ici, quelle que soit l'entrée.
intval() avec une base
intval($value, $base) lit la chaîne dans un autre système de numération. Avec la base 0, PHP regarde le préfixe : 0x pour l'hexadécimal, 0b pour le binaire, un 0 initial pour l'octal.
De float à int : troncature, pas arrondi
(int) supprime tout ce qui suit le point décimal, vers zéro. Arrondissez d'abord si vous voulez l'entier le plus proche, et faites attention aux parenthèses :
La dernière paire est le piège classique des floats : (0.1 + 0.7) * 10 est stocké comme 7.999999..., donc la troncature donne 7. Arrondir d'abord donne 8. La page des fonctions mathématiques couvre round, floor et ceil.
Convertir en bool, en string et en array
En bool, seule une poignée de valeurs deviennent false : 0, 0.0, "", "0", null et []. Tout le reste vaut true, y compris "0.0", " " et "false".
En string, true devient "1", alors que false et null deviennent tous deux "". Les floats perdent un .0 final, et les floats très grands ou très petits utilisent la notation avec exposant.
Convertir un tableau en chaîne ne l'assemble pas. Ceci affiche Tags: Array :
<?php
$tags = ["php", "web"];
echo "Tags: " . $tags;
et PHP ajoute un warning :
Warning: Array to string conversion in /home/index.php on line 3
Utilisez implode(", ", $array) ou json_encode($array) pour transformer un tableau en texte.
Tous les casts en un coup d'œil
Choisissez une valeur pour voir ce que intval, (bool), strval, is_numeric et gettype renvoient. Chaque case a été calculée par PHP 8.3.
| $x | intval | bool | strval | is_numeric | gettype |
|---|---|---|---|---|---|
| "10" | |||||
| "1abc" | |||||
| "abc" | |||||
| "" | |||||
| " " | |||||
| "0" | |||||
| "0.0" | |||||
| "1e1" | |||||
| "010" | |||||
| 1.5 | |||||
| true | |||||
| false | |||||
| null | |||||
| [] | |||||
| [1, 2] |
Chaînes numériques et conversion automatique
Une chaîne numérique est une chaîne qui ressemble à un nombre : "12", "-3.5", "1e3", avec éventuellement des espaces autour. PHP les convertit automatiquement dans les calculs, et is_numeric() vous dit si une chaîne en fait partie.
"12abc" + 1 donne toujours 13, mais PHP 8 affiche Warning: A non-numeric value encountered, et "abc" + 1 lève une TypeError. Convertissez ou validez avant de calculer sur une saisie utilisateur.
settype() et gettype()
settype() change le type d'une variable sur place et gettype() l'indique. get_debug_type() renvoie les noms plus courts que vous voyez dans les messages d'erreur (int, float, string).
La plupart du code utilise plutôt un cast ($value = (int) $value;), plus court et tout aussi lisible.
Valider une saisie au lieu de la convertir
(int) ne dit jamais non, donc (int) "abc" devient 0 en silence et (int) "5 apples" devient 5. Pour une saisie de formulaire, utilisez filter_var avec FILTER_VALIDATE_INT : il renvoie l'entier ou false.
Comparez le résultat avec === false, car 0 est un entier valide et == false le rejetterait. La page filter_var montre les plages de valeurs et les autres validateurs.
Questions fréquentes
Comment convertir une chaîne en int en PHP ?
Utilisez (int) $str ou intval($str) ; les deux donnent le même résultat en base 10. (int) "42" vaut 42, (int) "12abc" vaut 12 et (int) "abc" vaut 0. Pour refuser une saisie qui n'est pas un nombre entier, utilisez filter_var($str, FILTER_VALIDATE_INT), qui renvoie false au lieu de deviner.
Quelle est la différence entre intval() et (int) en PHP ?
En base 10, elles renvoient le même résultat. intval() accepte aussi une base : intval('ff', 16) vaut 255, et avec la base 0 elle lit les préfixes comme 0x, 0b et un 0 initial pour l'octal. Comme c'est une fonction, intval peut aussi être passée en callback, comme dans array_map('intval', $values).
Que renvoie (bool) "0" en PHP ?
false. La chaîne "0" fait partie des valeurs évaluées à faux en PHP, avec "", 0, 0.0, null et []. Toute autre chaîne vaut true, y compris "0.0", " " et "false".
Comment convertir un nombre en chaîne en PHP ?
Utilisez (string) $n, strval($n) ou placez-le dans une chaîne : "$n". (string) 3.0 vaut "3" ; pour un nombre fixe de décimales, utilisez number_format($n, 2) ou sprintf('%.2f', $n).