JeuWeb - Crée ton jeu par navigateur

Version complète : comparations de types en php [Réglé]
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Pages : 1 2
Question à 1€, qu'affiche ceci (en php) ?

Code PHP :
$do=0;
if(
$do=='dropmoney')die('argh'); 


Dit moi que je ne suis pas bien réveillé, que j'ai confondu un truc là !


Ca affiche bien 'argh' ...


Es bien normale docteur ?



/Lud
tu as mis 2 = non? c'est pas bon si? (il faut que je replonge dans mes cours, j'ai pris l'habitude du vb)
T'as besoin d'argent toi 34


Moi aussi, veux qu'on me drop de la money 57
Tu demande SI 0 == une chaine de caractere... le if retourn false, il ne devrait pas faire ton die, qui n'a rien a faire là, c'es tplutot un echo pour afficher. (c'est peut etre pour ça qu'il execute le die?) j'ai jamais utilisé le die comme ça moi...
Je ne comprends pas pourquoi ça marche pas (enfin pourquoi ça marche !)

normalement si on veut comparer les types (aussi) on utilise === non ?

Et pour le die(), c'est bien sûr pour pas avoir a donner de l'argent 2


Si ça a un importance :
Je viens d'effectuer le fastidieux (nécessaire ?) travail pour passer
global_vars = off, donc le $do reçoit la valeur (& type) du $_GET('do');
il faut écrire si tu veux comparer par type uniquement.

Code PHP :
$do=0;
  if(
$do ==='dropmoney')die('argh'); 

ou

Code PHP :
$do=0;
  if(
strval($do) =='dropmoney')die('argh'); 

d'ailleurs si tu fais
Code PHP :
var_dump($do =='dropmoney'); 
Tu verras que tu obtiens un boolean(true).

Lorsqu'une chaîne de caractères est évaluée comme une valeur numérique, le résultat et le type de la variable sont déterminés comme suit.

La chaîne de caractères est de type "double" si elle contient un des caractères '.', 'e' ou 'E'. Sinon, elle est de type entier ("integer" ).

La valeur est définie par la première partie de la chaîne. Si la chaîne de caractères débute par une valeur numérique cette valeur sera celle utilisée. Sinon, la valeur sera égale à 0 (zéro). Les données numériques valides ont un signe optionnel, suivies par un ou plusieurs digits (optionnellement, contenant un point de décimal), suivies par un exponentiel optionnel. L'exponentiel peut être un 'e' ou un 'E' suivi par un ou plusieurs digits.

tu trouveras plus d'infos sur http://fr.php.net
Je crois plutôt (à vérifier) que le triple égal vérifie l'égalité des deux chaînes + la conformité des types. Je m'explique :

Si on fait un

Code :
$int = 0;
$boolean = false;

Alors ($int == $boolean) vaudra true mais ($int === $boolean) vaudra false.
Dans le premier cas on vérifie uniquement la valeur, or un 0 vaut un false. Dans le second cas on vérifie le type des variables aussi.
à mon avis comme tu utilises == (et pas ===) php convertit "dropmoney" en entier (car $do est un entier)

"dropmoney" en entier ça donne 0 donc c'est normal

essaie de le faire à l envers

if ("dropmoney" == $do)

histoire de voir 34
Paul a écrit :Je crois plutôt (à vérifier) que le triple égal vérifie l'égalité des deux chaînes + la conformité des types. Je m'explique :

Si on fait un

Code :
$int = 0;
$boolean = false;

Alors ($int == $boolean) vaudra true mais ($int === $boolean) vaudra false.
Dans le premier cas on vérifie uniquement la valeur, or un 0 vaut un false. Dans le second cas on vérifie le type des variables aussi.


Je sais, juste que === t'evites de te tromper quand tu essayes de comparer un int et un string...
D'ailleurs je recommande d'initialiser un string a "" et non a 0, pour que PHP fasse le typage lui meme...

@Ter Rowan : Cf ce que je dis plus haut sur la facon dont PHP traite les comparaisons int/string 16
En fait, t'as oublié les {} dans ta condition, sans cela ca ne peut pas marcher non ?

A la place de :
Citation :$do=0;
if($do=='dropmoney')die('argh');

Mets plutot :
Citation :$do = 0;
if ($do == 'dropmoney') {die('Argh');}

Ca devrait plus t'afficher le die normalement vu que la condition n'est pas vérifié.
Pages : 1 2
URLs de référence