Introduction : pourquoi les chaînes et les nombres en PHP sont une éternelle tragédie
\nImaginez : vous écrivez un calculateur de livraison, et l'utilisateur saisit la quantité d'articles sous forme de chaîne "5". Vous essayez d'ajouter 10 — et vous obtenez "510" au lieu de 15. Cela vous dit quelque chose ? Bienvenue dans le monde de la conversion de types en PHP !
La question "How do I convert a string to a number in PHP?" est l'une des plus populaires sur Stack Overflow (plus de 2 millions de vues). Et pour cause : PHP est connu pour son typage implicite, qui à la fois simplifie la vie et crée des pièges.
\nDans ce guide, nous allons examiner 5 méthodes fiables pour convertir une chaîne en nombre, démystifier les mythes et apprendre à éviter les bugs. C'est parti !
\n\nThéorie : que se passe-t-il sous le capot de PHP ?
\nPHP est un langage à typage dynamique. Une variable peut être une chaîne, et une seconde plus tard, un nombre. Mais il y a un détail :
\n- \n
- Transtypage implicite — PHP décide lui-même comment interpréter les données (et se trompe souvent). \n
- Transtypage explicite — vous prenez le contrôle. \n
Quand vous écrivez "5" + 10, PHP convertit automatiquement la chaîne "5" en nombre. Mais essayez "5 pommes" + 10 — et vous obtenez 15 (PHP ignore silencieusement " pommes"). Et "pommes 5" + 10 donne 10 (la chaîne est considérée comme zéro). Du chaos ? Oui. Mais nous allons mettre de l'ordre.
Méthode 1 : L'opérateur de transtypage (int) et (float)
\nLa méthode la plus rapide et la plus simple consiste à utiliser le cast :
\n<?php\n$string = "42.8";\n$int = (int)$string; // 42 (partie entière)\n$float = (float)$string; // 42.8\n\necho $int; // 42\necho $float; // 42.8\n?>\nImportant : (int) supprime la partie fractionnaire sans arrondi. Pour arrondir, utilisez round() après la conversion.
Quand l'utiliser : lorsque vous êtes sûr que la chaîne ne contient qu'un nombre et que vous avez besoin d'une conversion rapide.
\n\nMéthode 2 : Les fonctions intval() et floatval()
\nCe sont les « grands frères » du cast — plus lisibles et flexibles :
\n<?php\n$string = "123.45abc";\n\n$int = intval($string); // 123\n$float = floatval($string); // 123.45\n\n// Avec indication de la base (uniquement pour intval)\n$hexString = "1A";\n$hexInt = intval($hexString, 16); // 26 (convertit une chaîne hexadécimale)\n\necho $int; // 123\necho $float; // 123.45\necho $hexInt; // 26\n?>\nAstuce : intval() peut travailler avec différentes bases (binaire, octale, hexadécimale). floatval() ne fonctionne qu'avec la base décimale.
Quand l'utiliser : lorsque vous devez traiter des « déchets » à la fin de la chaîne ou travailler avec des bases non standard.
\n\nMéthode 3 : La fonction settype() — conversion avec retour true/false
\nVous voulez non seulement convertir, mais aussi vérifier le succès de l'opération ? Utilisez settype() :
<?php\n$string = "99.9";\n$result = settype($string, "float"); // true\n\necho $string; // 99.9 (c'est maintenant un float)\necho $result; // 1 (true)\n\n// Si la chaîne n'est pas numérique\n$badString = "hello";\n$result = settype($badString, "integer"); // false\n\necho $badString; // 0 (converti en zéro)\necho $result; // (vide, false)\n?>\nImportant : settype() modifie la variable elle-même, et ne retourne pas une nouvelle valeur. Pratique lorsque vous devez garantir que le type a changé.
Quand l'utiliser : lorsque vous avez besoin de vérifier le succès de la conversion (par exemple, pour une saisie utilisateur).
\n\nMéthode 4 : Astuces arithmétiques (et pourquoi il vaut mieux ne pas les utiliser)
\nOui, on peut écrire $number = $string + 0 — PHP convertira lui-même la chaîne en nombre. Ou $number = $st