False et 0 en php

Résolu
Stargirlfr Messages postés 1175 Date d'inscription   Statut Membre Dernière intervention   -  
Dynamix Messages postés 206 Statut Membre -
Bonjour,

Le php est un drôle de langage, et, comme je débute, je souhaiterais comprendre pourquoi :

1. "false" == 0 est vrai
2. false == 0 est vrai

mais

3. "false" == false est faux ?

Pour la 1ère expression, pourquoi la chaîne de caractère "false" est-elle nulle ?
Pour la 2ème expression, je comprends bien que le type booléen false est égal à 0.
Pour la 3ème et dernière expression, je crois comprendre que la chaîne de caractère "false" n'est pas false car elle contient justement quelque chose.

Est-ce bien cela ?

De plus, que signifie l'expression 1e1 ?
Pourquoi avons-nous : "1e1" == "10" et "1e1" === "10" de vraies ?

Merci d'avance !
A voir également:

9 réponses

Dynamix Messages postés 206 Statut Membre 76
 
Ton post m'a intrigué et j'ai fait une petite recherche sur le manuel de PHP.

Tu devrais trouver tes réponses ici :
https://www.php.net/manual/fr/language.types.boolean.php
https://www.php.net/manual/fr/language.types.string.php
0
Stargirlfr Messages postés 1175 Date d'inscription   Statut Membre Dernière intervention   362
 
Merci pour ton aide. Mais, je ne crois pas avoir tout compris.

Je comprends que :

L'entier 0 est considéré comme false. Donc,
2) 0 == false est true.

Mais la chaîne de caractère "false" n'est pas considéré comme false car non vide...
Donc, comment expliquer que "false" == 0 est vrai, mais que "false" == false est faux... ?

Sinon, peux-tu me dire ce à quoi correspond 1e1 ?

Encore merci !
0
Dynamix Messages postés 206 Statut Membre 76
 
Tu as tout expliqué dans le manuel, ce qui correspond à tes falses c'est dans la partie boolean et "1e1" dans la partie chaînes de caractères.

false == 0 est vrai en effet et pour tous les autres chiffres false == chiffre est faux.
"false" == false est vrai car tout simplement seule la chaîne vide est fausse.
Et pour "false" == 0 je suppose que simplement tu compares la chaîne à un chiffre donc c'est faux.

Après pour le "1e1" c'est tout simple 1e1 en mathématique ça fait 10.
Les chaînes de caractères, exprimées dans un contexte mathématique sont converties en chiffre-nombres (lire le manuel parce que je suis pas sûr à 100% de ce que j'avance...)

As-tu vraiment lu le manuel? Car tu as tout d'expliqué, et exactement ce que tu veux.
0
Stargirlfr Messages postés 1175 Date d'inscription   Statut Membre Dernière intervention   362
 
Je te remercie de te pencher sur mon problème ! Mais, je ne suis pas d'accord avec toi... =/
En fait, en codant les hypothèses, je trouve les résultats suivants (me serais-je trompée ?) :

1°) false == 0 : VRAI car le booléen 0 est considéré comme false et false == false. --> OK

2°) "false" == 0 : VRAI ... et ça, je ne sais pas pourquoi --> ???

3°) "false" == false : FAUX. Je suppose que c'est parce que la chaîne de caractères "false" est non vide (seule la chaîne vide : "" ou 0 est considérée comme false). --> OK

Donc, ce que je ne comprends pas, c'est pourquoi la chaîne de caractère "false", qui n'est donc pas vide, est égale à l'entier 0...


Sinon, pour ma 2ème question, je trouve les résultats suivants :
1°) "1e1" == "10" est VRAI : car la valeur de la chaîne de caractères "1e1" est égale à 10.
2°) "1e1" === "10" est FAUX : car la chaîne de caractères "1e1" n'est pas égale à la chaîne de caractères 10.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dynamix Messages postés 206 Statut Membre 76
 
C'est censé faire quoi === ? (jamais vu)

"false" == 0 : VRAI ... et ça, je ne sais pas pourquoi --> ???

Pardon j'avais mal lu...
Je suppose que dans ce contexte "false" est convertie en false?
0
Stargirlfr Messages postés 1175 Date d'inscription   Statut Membre Dernière intervention   362
 
En fait, l'égalité == ne compare que la valeur, alors que celle === compare la valeur ET le type.
Donc, là, je suppose que ce n'est pas égale avec === car 1e1 n'est pas équivalent à 10 (alors qu'avec == c'est vraie car 1e1=10). Je ne sais pas si c'est très clair, mais c'est comme ça que je le comprends !

Pour "false" == 0, si "false" est converti en false, alors, on devrait avoir "false" == false vrai, or c'est faux...
D'où ma question...

Qu'est-ce que c'est compliqué ^^ !!
0
Dynamix Messages postés 206 Statut Membre 76
 
Tu l'as dit...
dans "false" == 0 il est converti et dans "false" == false car ce n'est pas le même contexte?
A prendre au conditionnel...

Pour "1e1" === "10" égal faux ça me semble correct du coup.

Je connaissais pas === j'ai appris un truc aujourd'hui :)
0
Stargirlfr Messages postés 1175 Date d'inscription   Statut Membre Dernière intervention   362
 
J'ai trouvé la réponse à cet endroit (réponse de papyphp) :
https://www.developpez.net/forums/d201902/php/langage/tableaux-string-booleen-abheration/

En fait, php transforme les variables pour pouvoir les comparer.

Dans le cas de l'expression "false" == 0, la chaine de caractères "false" est transformée par php en entier, et prend la valeur de 0. Donc, l'expression est vraie !

Pour false == 0, l'entier 0 est considéré comme booléen égale à false.

Quant à la 3ème expression, "false" == false : celle là est fausse car la chaîne de caractère false n'est pas équivalente au booléen false !

Encore merci Dynamix de t'être penché sur mon problème ! Bonne continuation !
0
Dynamix Messages postés 206 Statut Membre 76
 
Derien, bonne continuation :)
0