Je viens de tomber sur un bug qui m’a paru assez étrange au premier abord, mais qui, après réflexion est tout a fait « normal ».
Dans mon code, je testais l’égalité entre 2 chaines de caractères ("0000000123" et "000123") et ça me retournait true alors que j’attendais false.
En réfléchissant 2 minutes, voici ce que php effectue:
- est-ce que la chaine A est identique à la chaine B: non
- est-ce qu’en castant la chaine A et/ou B, j’arrive à trouver une égalité: oui
En effet, en castant les 2 chaines en entier, on obtient 123 et l’égalité est trouvée.
Comment faire alors pour que PHP retourne false ? En utilisant l’opérateur === qui teste non seulement l’égalité mais vérifie également qu’ils sont de même type. En réalité, ça teste l’égalité sans faire de cast. En conséquence de quoi, == est très légèrement plus lent que ===. En d’autres termes, si vous codez bien connaissez exactement le type de vos données, préférez === car il est plus rapide.
J’ai actuellement un projet de site web qui a besoin d’envoyer un mail… rien de bien extraordinaire en fait. Mais envoyer un mail depuis PHP sur une station Ubuntu est moins facile qu’il n’y parait.
Moi qui ne jurais que sur le