PHP : comment corriger l'erreur Warning: A non-numeric value encountered
Le message d'erreur "Warning: A non-numeric value encountered" est une des nouveautés de la version 7.1 du langage PHP. Ce message signifie qu'une valeur non numérique a été utilisée pour réaliser une opération arithmétique. Il est possible d'éviter cette erreur en utilisant des fonctions de contrôle sur les variables. Cette erreur peut-être également liée à une confusion avec un autre langage dans le développement de votre site.
Lorsque vous utilisez une variable avec une opération, l'interpréteur de PHP va essayer de la convertir en nombre. Le message d'erreur apparaît si cette conversion a échoué.
$a = "5"; $b = "3"; $c = "8a"; $total = 0; $total = $a + $b; //Aucune erreur car PHP a converti les chaînes de caractères en nombre $total += $c; //Affiche le message "Warning: A non-numeric value encountered"
Il existe une fonction PHP qui contrôle la nature d'une variable pour vérifier qu'il s'agit bien d'un nombre. Il s'agit de la fonction "is_numeric()".
$total = 0; if (is_numeric($a) && is_numeric($b)) { $total = $a + $b; //$a et $b sont bien des nombres, l'opération est effectué } if (is_numeric($c)) { $total += $c; //$c n'est pas un nombre, on ne passera pas ici } echo $total; //Affiche 8
Il existe également des fonctions plus précises pour contrôler la nature du nombre. "is_int()" vérifie que le nombre est un entier. "is_float()" est utilisée pour vérifier que le nombre est un nombre décimal.
Une mauvaise habitude de code peut également provoquer cette erreur. Lors du développement de certains sites web, les langages PHP et JavaScript sont utilisés conjointement. PHP s'occupe des traitements serveurs et JavaScript des interactions avec les utilisateurs. Dans le langage JavaScript, l'opérateur "+" permet de concaténer deux chaînes. En PHP, il ne sert que pour les opérations, c'est le caractère "." qui concatène deux chaînes de caractères. Si vous utilisez le caractère "+" pour concaténer deux chaînes en PHP, vous aurez également le message d'erreur "Warning: A non-numeric value encountered".