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:

  1. est-ce que la chaine A est identique à la chaine B: non
  2. 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.

Vus : 566
Publié par Renaud Littolff : 27