J'ai le morceau de code suivant:
$item['price'] = 0;
/* Code to get item information goes in here */
if($item['price'] == 'e') {
$item['price'] = -1;
}
Il est destiné à initialiser le prix de l'article à 0, puis à obtenir des informations à ce sujet. Si le prix est indiqué par «e», cela signifie un échange au lieu d'une vente, qui est stocké dans une base de données sous la forme d'un nombre négatif.
Il est également possible de laisser le prix à 0, soit parce que l'objet est un bonus, soit parce que le prix sera fixé ultérieurement.
Mais, chaque fois que le prix n'est pas défini, ce qui lui laisse la valeur initiale de 0, la if
boucle indiquée ci-dessus est évaluée comme vraie et le prix est défini sur -1. Autrement dit, il considère 0 comme égal à «e».
Comment cela peut-il être expliqué?
Lorsque le prix est fourni à 0 (après l'initialisation), le comportement est erratique: parfois le if est évalué comme vrai, parfois il est évalué comme faux. *
if((string)$item['price'] == 'e')
corrige le comportement étrange. Voir stackoverflow.com/a/48912540/1579327 pour plus de détails