Quelqu'un peut-il m'expliquer pourquoi cela:
var_dump((bool) 1==2);
retour
bool(true)
mais
var_dump(1==2);
retour
bool(false)
Bien sûr, le deuxième retour est correct, mais pourquoi à la première occasion, php renvoie une valeur inattendue?
Ce n'est pas aussi étrange qu'il n'y paraît. (bool)
a une priorité plus élevée que ==
, donc ceci:
var_dump((bool) 1==2);
est équivalent à ceci:
var_dump( ((bool) 1) == 2);
ou ca:
var_dump(true == 2);
En raison de type jonglage , le 2
est également essentiellement converti en bool
(car il s'agit d'une "comparaison approximative"), il est donc équivalent à ceci:
var_dump(true == true);
ou ca:
var_dump(true);
Parce que dans le premier exemple, le cast a lieu avant la comparaison. C'est comme si tu écrivais
((bool) 1)==2
ce qui équivaut à
true == 2
qui est évalué en convertissant 2
à true
et la comparaison, pour finalement produire true
.
Pour voir le résultat attendu, vous devez ajouter des parens pour rendre l'ordre explicite:
var_dump((bool)(1==2));
J'utilise de cette façon:
!!0 (false)
!!1 (true)
La façon dont vous avez écrit l'instruction ((bool) 1 == 2) retournera toujours true car elle exécutera toujours le code comme ci-dessous:
Tout d'abord, il exécutera
(bool)1
et (bool) 1 retournera vrai.
Maintenant que (bool) 1 est vrai à la deuxième étape, votre déclaration sera comme
true ==2
Puisque si nous transtypons 2 en booléen, cela retournera vrai, à l'état final, votre déclaration sera comme
true == true
Ce qui reviendra évidemment vrai. La même chose que j'ai expliquée il y a un an dans mon article PHP Type Casting également.