False et 0 en php

Résolu
Stargirlfr Messages postés 1175 Date d'inscription   Statut Membre Dernière intervention   -  
Dynamix Messages postés 202 Date d'inscription   Statut Membre Dernière intervention   -
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 202 Date d'inscription   Statut Membre Dernière intervention   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 202 Date d'inscription   Statut Membre Dernière intervention   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 202 Date d'inscription   Statut Membre Dernière intervention   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 202 Date d'inscription   Statut Membre Dernière intervention   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 202 Date d'inscription   Statut Membre Dernière intervention   76
 
Derien, bonne continuation :)
0