Bonsoir,
J'étais en train de développer paisiblement en PHP jusqu'à tomber sur un code récalcitrant : à première vue, une erreur de logique de ma part.
A grand coup de var_dump() et de echo, je débug vaillamment, mais le résultat est le même. Du coup, je décide d'isoler l'instruction qui pose problème dans un autre script de test. Mais je constate que la bizarrerie persiste.
Sans vous faire plus attendre, je m'explique tout de suite avec une série de tests ci-dessous (testé sur phptester.net en version 5.5 et sur mon WampServer 3 avec PHP 5.6.15) :
Bref, peut-être qu'il y a une explication logique, peut-être pas. J'ai recherché sur Internet si un éventuel bug existait mias je ne trouve rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <?php var_dump(3 == 3); // renvoie true (normal!) var_dump("3" == 3); // renvoie true (compréhensible pour un langage faiblement typé) var_dump("3" === 3); // renvoie false (on voit l'utilité de l'opérateur de comparaison strict) // c'est là que ça se gâte ^^ var_dump("3-1-2" == 3); // renvoie true (WTF !!!) var_dump("3-1-2" === 3); // renvoie false (logique puisque les types sont différents) // on poussant les tests, je m'aperçois que je peux mettre n'importe quoi derrière le premier chiffre de la chaîne // PHP voit toujours ces deux expressions comme "égales" var_dump("3xxxxxxxx" == 3); // renvoie toujours true (!!) var_dump("39xxx" == 39); // -> true : idem avec plusieurs chiffres dans le nombre var_dump("424yyy" == 424); // -> true var_dump("3.1.9" == 39); // -> false : avec des points ?>
Du coup ma question est simple : avez-vous déjà rencontré ce cas de figure et existe-t-il une explication car du point de vue logique ce n'est pas correct du tout quand même ^^.
Merci d'avance.
Partager