Une (des nombreuses) bizarrerie de PHP
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.