Titre: [php] petite bizarrerie sur les égalités Posté par: S0410N3 le 20 Mars 2007 à 17:25:33 J'ai remarqué un petit truc aujourd'hui sur php et qui est assez vicieux :
Code: <?php 00000001=0001 00000001=0001 00000001!=0001 Etonnant non ? Je n'avais jamais remarqué ce comportement perso. En général ça se produit plus dans l'autre sens où il interprète un nombre comme une chaîne et où on est obligé de coller un intval(). Donc en gros il y a vraiment intérêt d'utiliser le triple = quand on bosse sur des chaînes avec des nombres dedans et des 0 au début (du binaire par exemple ;)). Ca m'a rendu fou un bon moment cette connerie... Autant je comprends la première égalité parce qu'il doit interpréter des nombres, autant la deuxième me laisse perplexe ou alors je ne comprends pas bien le rôle de strval()... Si quelqu'un a une explication au pourquoi ça marche pas avec les strval() je suis preneur. Question bonus : sur quelle épreuve est-ce que je me prenais la tête ? =D j/k Titre: [php] petite bizarrerie sur les égalités Posté par: Zmx le 20 Mars 2007 à 17:49:28 Je voit pas ce qui te choque dans la 2eme qui ne te choque pas dans la premiere.
1) tu a des chaine, tu les compore avec "==" et il a l'air de considéré que c'est des chiffre? 2) Tu as des chaine, que tu transfrome en chaine et tu les compare avec un ==. en gros c'est comme pour le cas 1 :D Ca prouve plutot bien que avoir des var non typé c'est chiant, au moins en perl on a eq et neq pour les chaines. (ça existe pas en php ? ) Edit: Ptet qu'utiliser strcmp pourrais etre une bonne idée. Titre: [php] petite bizarrerie sur les égalités Posté par: akhenathon le 20 Mars 2007 à 18:02:22 étant donnée que le php n'est pas trés doué avec les 0 à gauche cela ne me choque pas beaucoup
Titre: [php] petite bizarrerie sur les égalités Posté par: S0410N3 le 20 Mars 2007 à 18:06:10 Ah ouais effectivement vu comme ça c'est logique... thx
Non ça n'existe pas eq et ne en php. C'est sûr que là ça serait plus pratique. Au moins en perl on sait sur quoi on bosse. Sinon ouais j'avais pensé au strcmp. En gros je disais juste ça pour dire qu'il faut faire gaffe. On chope des sales habitudes avec les variables auto-typées et dans certains cas, comme celui-ci, ça peut franchement poser problème. Titre: [php] petite bizarrerie sur les égalités Posté par: the lsd le 20 Mars 2007 à 22:27:32 Citation de: S0410N3 Question bonus : sur quelle épreuve est-ce que je me prenais la tête ? =D j/k Tu serais pas en train de faire un codeur/decodeur de base64 toi ??? =DEnjoy The lsd Titre: [php] petite bizarrerie sur les égalités Posté par: S0410N3 le 21 Mars 2007 à 00:04:56 Non, je bossais sur la crypto transmission ;)
Titre: [php] petite bizarrerie sur les égalités Posté par: Nebelmann le 21 Mars 2007 à 08:47:09 Citation de: http://www.php.net/manual/fr/language.operators.comparison.php Exemple Nom Résultat Il compare donc sur la valeur, et pas sur le type, dans ton deuxième test... même en rajoutant un strval (qui je pense ne change rien puisque tu avais déjà une chaîne de caractères au départ).$a == $b Egal TRUE si $a est égal à $b. $a === $b Identique TRUE si $a est égal à $b et qu'ils sont de même type (introduit en PHP 4). Mais bon, vu les incohérences qu'on peut trouver dans PHP, ce n'est pas plus étonnant que ça ^^. |