l'autre jour je me suis trouvé face à quelque chose qui m'a choqué :
à votre avis, le code ci-dessous affiche quoi ?
1 2 3 4 5 6 7 8
|
$a = 'php'; //ou n'importe quel string
$b = 0;
if($a == $b)
echo 'true';
else
echo 'false'; |
moi j'aurais dit 'false', et non les potes !
![:calim2:](https://www.developpez.net/forums/images/smilies/calim2.gif)
il retourne true, il faut donc dire que 'php' = 0, javascript par exemple retourne bien false.
ma déduction est que, comme les deux variables sont de type différent php essaie d'abord de les "convertir" dans un même type afin de les comparer, à l'occurrence je pense que php convertit tout en int car
1 2 3 4 5
|
$a = 'php';
echo (int)$a; //0
$a = '1php';
echo (int)$a; //1 |
donc dans le premier morceau de code en réalité la condition est vraie si on compare n'importe quel string à 0 sauf si le string commence par un chiffre autre que 0
par contre si $b ='0', on a bien $b == 'php' => false
c'est un truc tout bête qui m'a laissé perplexe, j'espère ne pas avoir des conditions comme celles-là un peu caché dans mes projets si non ça va être rigolo
tout ça pour dire que le faible typage de php est pratique mais trompeur des fois
Partager