Il semble qu'en PHP 7.1, un avertissement sera émis si une valeur non numérique est rencontrée. Voir ce lien.
Voici la partie pertinente concernant l'avertissement que vous recevez :
De nouvelles erreurs E_WARNING et E_NOTICE ont été introduites lorsque des chaînes invalides sont coercées en utilisant des opérateurs attendants des nombres ou leurs équivalents d'assignation. Un E_NOTICE est émis lorsque la chaîne commence par une valeur numérique mais contient des caractères non numériques en fin de chaîne, et un E_WARNING est émis lorsque la chaîne ne contient pas de valeur numérique.
Je suppose que $sous_total
, $item['quantity']
ou $product['price']
ne contient pas une valeur numérique, donc vous devez commencer à les déboguer, par exemple,
var_dump($sous_total, $item['quantity'], $product['price']);
et voir lequel est incorrect pour ensuite corriger la source de la valeur incorrecte.
Lorsque vous traitez des entrées utilisateur, assurez-vous que les valeurs contiennent une valeur numérique avant de les traiter. Peut-être utilisez une sorte de condition avant de calculer le $sous_total, comme ceci :
``
Seulement dans un cas rare, lorsque vous savez positivement qu'une certaine valeur non numérique peut être utilisée dans les calculs, vous pouvez la convertir en type numérique. Par exemple, dans certains codes hérités une chaîne vide peut être utilisée dans les calculs, ce qui était silencieusement converti en 0
dans les versions de PHP précédentes. Ici, vous pouvez ajouter une condition pour cette valeur exacte :
$item['quantity'] = ($item['quantity'] === "" ? 0 : $item['quantity']);
$sous_total += $item['quantity'] * $product['price'];
ce code ignorera une chaîne vide mais vous avertira si une autre valeur inattendue est rencontrée.
Mieux encore, assurez-vous simplement que $item['quantity']
est toujours de type numérique, de préférence en utilisant le système d'indication de type de PHP.
``
8 votes
var_dump($item['quantity'], $product['price'])
4 votes
Il semble qu'il s'agisse d'un nouvel avertissement en PHP 7 (comme vous le savez). php.net/manual/en/migration71.other-changes.php Lorsque vous obtenez l'erreur, ces variables ont-elles des valeurs ? Je pense que vous pourriez l'éviter en les initialisant à 0.
1 votes
@MichaelHanon où se trouve la réponse à laquelle vous faites référence? Quelle est l'erreur de syntaxe?
2 votes
$sub_total += ((int)$item['quantity'] * (int)$product['price']);
0 votes
I use legacy format like this a=a+b; or str=str."asd"; or $this->storeItems = $this->storeItems . $str;
0 votes
Cette question a besoin de détails supplémentaires de diagnostic/débogage. Montrer votre code et le message d'avertissement ne peint pas le tableau complet. Nous ne savons pas quels sont vos données d'entrée exactes. Vous remarquerez que votre question est si vague que les réponses sont en fait des suppositions sur ce que sont vos entrées. Hors-sujet: Besoin de Détails de Débogage Voir le commentaire de u_mulder.