Introduction : pourquoi les chaînes ne veulent-elles pas s'additionner ?
\n\nChaque développeur qui a écrit au moins une fois en PHP a rencontré une situation où, au lieu du nombre attendu, il obtient un résultat étrange. Vous essayez d'additionner deux variables provenant d'un formulaire ou d'une base de données, et PHP affiche quelque chose comme 1520 au lieu de 35. Cela vous dit quelque chose ? C'est le problème classique : convertir une chaîne en nombre en PHP.
PHP est un langage à typage dynamique. C'est à la fois une bénédiction et une malédiction. D'un côté, il essaie de deviner ce que vous voulez dire et convertit automatiquement les types. De l'autre, ces "devineries" conduisent souvent à des bogues difficiles à détecter. Aujourd'hui, nous allons passer en revue toutes les méthodes de conversion d'une chaîne en nombre en PHP — du simple au plus avancé — et apprendre à le faire correctement.
\n\nRéponse rapide : 4 méthodes en 30 secondes
\n\nSi vous avez besoin d'une solution rapide, voici une antisèche. Mais ne fermez pas l'article tout de suite : chaque méthode a ses particularités et ses pièges.
\n\n<?php\n// Méthode 1 : Conversion de type explicite\n$number = (int) "42"; // int(42)\n$float = (float) "3.14"; // float(3.14)\n\n// Méthode 2 : Fonction intval()\n$number = intval("42"); // int(42)\n\n// Méthode 3 : Fonction floatval() / doubleval()\n$float = floatval("3.14"); // float(3.14)\n\n// Méthode 4 : Avec settype()\n$str = "42";\nsettype($str, "integer"); // maintenant $str = int(42)\n?>\n\nToutes les quatre méthodes fonctionnent, mais elles se comportent différemment dans les cas limites. Examinons chacune en détail.
\n\n1. Conversion de type explicite : (int) et (float)
\n\nLa méthode la plus rapide et la plus évidente pour convertir une chaîne en nombre en PHP est d'utiliser les opérateurs de conversion de type. Ils agissent comme un "changement forcé" du type de la variable.
\n\nExemples avec (int)
\n\n<?php\necho (int) "42"; // 42\necho (int) "3.99"; // 3 (la partie décimale est supprimée !)\necho (int) "42 pommes"; // 42 (nombre au début)\necho (int) "pomme 42"; // 0 (ne peut pas reconnaître le nombre)\necho (int) ""; // 0\necho (int) null; // 0\n?>\n\nImportant : PHP essaie de trouver un nombre au début de la chaîne. Si la chaîne commence par des lettres, le résultat sera 0. Ce comportement est souvent une source d'erreurs, surtout lors du traitement des entrées utilisateur.
Exemples avec (float)
\n\n<?php\necho (float) "3.14"; // 3.14\necho (float) "3,14"; // 3.0 (la virgule ne fonctionne pas !)\necho (float) "2.99 euros"; // 2.99\necho (float) "abc"; // 0\n?>\n\nAstuce : N'oubliez pas que PHP utilise le point comme séparateur décimal. Si les utilisateurs saisissent des nombres avec une virgule (comme c'est l'usage en France), vous devez d'abord remplacer la virgule par un point avec str_replace(',', '.', $str).
2. Fonctions intval() et floatval()
\n\nCes fonctions sont une version plus "intelligente" de la conversion explicite. Elles font la même chose, mais permettent de spécifier la base numérique pour intval().
<?php\n// intval() — conversion en nombre entier\necho intval("42"); // 42\necho intval("1010", 2); // 10 (système binaire !)\necho intval("FF", 16); // 255 (hexadécimal)\necho intval("42.99"); // 42 (la partie décimale est supprimée)\n\n// floatval() — conversion en nombre à virgule flottante\necho floatval("3.14"); // 3.14\necho floatval("2.71828"); // 2.71828\n?>\n\nQuand l'utiliser : intval() est indispensable si vous travaillez avec des nombres dans différentes bases (par exemple, pour analyser des codes HEX de couleurs). Pour les nombres ordinaires, il n'y a pratiquement pas de différence avec (int).
3. Fonction settype() : conversion sur place
\n\nContrairement aux méthodes précédentes, settype() ne renvoie pas une nouvelle valeur, mais