IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

$b=($a==15); me retourne 1 !


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut Retours de valeur false booleens
    Bonjour

    voila je debute en php j'ai fais un petit script pour tester des variables un peu plus complexe et en faisant ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $a=10;
    $b=($a==15);
    if($b=1){$c="vrai";}
    else {$c="faux";}
    echo '$a vaut '.$a."<br />";
    echo '$b vaut '.$b."<br />";
    echo '$c vaut '.$c."<br />";
    ca me retourne ca :
    $a vaut 10
    $b vaut 1
    $c vaut vrai

    mon but c'est pas d'afficher absoluement $c vaut faux mais de comprendre pourquoi $b=($a==15); me retourne $b=1 alors que $a est different de 15.

    merci d'avance au nom des noobs !

  2. #2
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Par défaut
    C'est parce que dans ton if tu n'utilise pas un égal logique mais un égal d'assignation... Donc forcément ça sera vrai. Voici le code que tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $a=10;
    $b=($a==15);
    if($b==1){$c="vrai";}
    else {$c="faux";}
    echo '$a vaut '.$a."<br />";
    echo '$b vaut '.$b."<br />";
    echo '$c vaut '.$c."<br />";
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut
    mon dieu j'ai honte ):

    du coup echo $b; ne me retourne plus rien?

    simplement par curiosité pourquoi pour $b vrai il me retourne 1 et pour $b faux il me retourne rien et pas 0?


    merci Yoteco pour ta réponse!!

  4. #4
    Membre éclairé Avatar de mdr_cedrick
    Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2008
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Janvier 2008
    Messages : 374
    Par défaut
    parce que contrairement à d'autres langages PHP ne sait pas de quel type est une variable qui ne contient rien
    il ne pourra pas te dire si
    $b = 0;
    $b = '';
    $b = null;
    $b = false;
    etc etc

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut
    Ok je connais pas trop les booleens mais j'avais cru comprendre que pour un booleen il n'y avait que 2 valeurs possible true ou false, traduite par 1 et 0 en prog?

    ce que je comprend pas c'est que si je fais un gettype sur $b il me dit bien que c'est un booleen pourtant...
    et je trouve bizar pour ne pas dire étrange que php sache traduire un booleen true par 1 et pas un booleen false par 0, non?

    Si je fais un settype($b,"bool"); il ne me met pas plus de valeur pour $b ):

    mais encore une fois je connais pas trop les booleens donc dsl si je dis des aneries. (la boucle est bouclée )

    merci pour ta réponse en tous les cas, je vais faire quelques recherche dans ce sens.

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Peut-être serait-il plus sûr de typer d'emblée $b comme un bool et de lui affecter ensuite le résultat de ta condition...?

    Il semble qu'il décode un peu mal le type de $b avec ton attribution directe cette fois...

    Concrètement je veux dire essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    $a=10;
    $b=false;
    $b=($a==15);
    if($b==true){$c="vrai";}
    else {$c="faux";}
    echo '$a vaut '.$a."<br />";
    echo '$b vaut '.$b."<br />";
    echo '$c vaut '.$c."<br />";
    ?>
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut
    bonjour dendrite,

    j'ai deja essayer de typer le boolean avant la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	$a=10;
    	settype($b,"bool");
    	$b=($a==15);
    	if($b==true){$c="vrai";}
    	else {
    		$c="faux";
    		//$b=0;
    		}
    	echo '$a vaut '.$a."<br />";
    	echo '$b vaut '.$b."<br />";
    	echo gettype($b)."<br />";
    	echo '$c vaut '.$c."<br /><hr />";
    echo $b; ne renvoit toujours rien.
    Evidement si de base tu lui affecte false ... mais a ce moment tu peux tout autant lui affecter 0.

    Je ne cherche pas a contourner je voulais juste demander betement pourquoi php sait te sortir 1 pour un booleen true mais pas 0 pour un false

  8. #8
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Je ne sais pas non plus Eilijah...

    Mais juste pour répondre à ça :

    Evidement si de base tu lui affecte false ... mais a ce moment tu peux tout autant lui affecter 0.
    non... si tu lui affectes 0, il ne saura pas si c'est un integer ou un booléen...

    Tandis que si tu lui affectes false sans guillemets, (ou true), il saura que ça ne peut être qu'un booléen.

    Par ailleurs, je viens d'aller vérifier les attributs de la fonction settype(), et elle ne renvoie que true or false pour les bool.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #9
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Autre chose en regardant ton code, je peux me tromper, mais je n'en comprends pas la logique.
    Es-tu bien sûr que ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $b=($a==15);
     
    //est égal à ceci :
    $b=false;
    if($a==15){
    $b=true;
    }
    Il me semble que dans ton code, $a n'étant jamais égal à 15, $b n'est pas affecté... ni vrai ni faux... Il ne reçoit rien...

    tandis que dans ma proposition, $b est affecté dans tous les cas.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut
    Bonsoir dendrite!

    Citation Envoyé par Dendrite
    non... si tu lui affectes 0, il ne saura pas si c'est un integer ou un booléen...
    ce que je voulais dire par la c'est que si tu lui affecte false de base il te repondra forcement false si $a est different de 15, comme il t'afficherait "Satisfaction!" si tu lui affectais cette valeur. Mais biensure je reconnais que tu lui affectes le type par la meme occasion.



    Citation Envoyé par Dendrite
    Par ailleurs, je viens d'aller vérifier les attributs de la fonction settype(), et elle ne renvoie que true or false pour les bool
    je comprend pas, settype n'est il pas censé affecter un type a une variable, quel rapport avec false/true?



    Citation Envoyé par Dendrite
    Il me semble que dans ton code, $a n'étant jamais égal à 15, $b n'est pas affecté... ni vrai ni faux... Il ne reçoit rien...
    pour etre franc j'en sais rien !! Mais en effet ca vient peut etre de la!!!
    Je debute du coup , j'apprend un peu sur le tas et c'est vrai que j'extrapole pas mal; pour :
    je comprend ca comme si $a==15 alors ($a==15)=true, si $a!=15 alors ($a==15)=false.

    mais c'est une excelente suggestion!

    si $b est vide ca expliquerait tout?

    je ne sais pas comment tester ca, je chercherai une fonction qui retournela valeur d'une variable un peu plus tard, pour le moment :
    PAUSE FILM

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut
    en effet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	$a=15;
    	$b=($a==10);
    	if(empty($b))
    	{
    	echo '$b est vide';
    	}
    retourne bien $b est vide.

    donc :
    signifierait seulement "si $a==15 alors $b=1" et laisse la variable vide dans le cas contraire ?

    je crois que je viens de comprendre la réponse de mdr_cedrick quand il me parle de variable vide.
    vide != false

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut
    Ahahah juste pour me contredire, le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	$a=10;
    	$b=($a==15);
    	if($b==true)
    		{echo '$b est vrai'."<br />";}
    	else if($b==false)
    		{echo '$b est faux'."<br />";}
    	else if (empty($b))
    		{echo '$b est vide'."<br />";}
    	echo '$a vaut '.$a."<br /><hr />";
    me retourne $b est faux. Et le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	$a=10;
    	$b=($a==15);
    	if($b==true)
    		{echo '$b est vrai'."<br />";}
    	else if($b==false)
    		{echo '$b est faux'."<br />";}
    	else if (empty($b))
    		{echo '$b est vide'."<br />";}
    	echo '$a vaut '.$a."<br /><hr />";
    me retourne $b est vide.

    donc si je comprend de travers (restons concentré), une variable booleen peut etre vide et si c'est le cas pour php c'est egalement une variable false.
    donc vide==false mais la valeur renvoyée par defaut est "vide"

    c'est un peut comme si j'avais ecrit 10 réponses qui serve a expliquer la simple et précoce réponse de mdr_cedrick là non?
    désolé d'avoir autant parlé pour ne rien dire :/

    mais bon cette fois j'ai bien tout compris un? non?


    PS: désolé pour la triple réponse je l'ai fais machinalement et je ne trouve pas de bouton pour annuler les 2 derniers mess!

  13. #13
    Membre confirmé Avatar de dervish
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 100
    Par défaut
    Salut,
    en fait un petit tour dans le manuel, et hop tu as toutes les infos nécessaires...

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut
    ):

    le pire c'est que je suis passé sur cette page mais que je n'ai pas regardé les commentaires !! or en effet :

    Citation Envoyé par Wackzingo 27-Jan-2008 03:39
    It is correct that TRUE or FALSE should not be used as constants for the numbers 0 and 1. But there may be times when it might be helpful to see the value of the Boolean as a 1 or 0. Here's how to do it.

    $var1 = TRUE;
    $var2 = FALSE;

    echo $var1; // Will display the number 1

    echo $var2; //Will display nothing

    To get it to display the number 0 for a false value you have to typecast it:

    echo (int)$var2; //This will display the number 0 for false.
    désolé pour la pollution ..


    Pour ceux que ca interesse des essais pour renvoyer une valeur false avec entre autre intval() (int) et settype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    //intval() semble plus lent a traiter que (int)
    $a=false;
    echo 'pour $a=false :'."<br />";
    intval($a);
    echo 'avec intval($a), $a vaut "'.$a.'" et est un '.gettype($a)."<br />";
    $a1=intval($a);
    echo 'avec $a1=intval($a), $a vaut "'.$a.'" et est un '.gettype($a)."<br />";
    echo 'avec $a1=intval($a), $a vaut "'.$a1.'" et est un '.gettype($a1)."<br /><br />";
     
    $b=false;
    echo 'pour $b=false :'."<br />";
    (int)$b;
    echo 'avec (int)$b, $b vaut "'.$b.'" et est un '.gettype($b)."<br />";
    $b1=(int)$b;
    echo 'avec $b1=(int)$b, $b vaut "'.$b.'" et est un '.gettype($b)."<br />";
    echo 'avec $b1=(int)$b, $b vaut "'.$b1.'" et est un '.gettype($b1)."<br /><br />";
     
    $c=false;
    echo 'pour $c=false :'."<br />";
    settype($c,"integer");
    echo 'avec settype($c,"integer"), $c vaut "'.$c.'" et est un '.gettype($c)."<br /><hr />";
     
    // Résultats des meme operation pour true histoire de voir la difference avec false
    echo 'echo true renvoi "'.true.'"'."<br />" ;
    echo 'echo (true) renvoi "'.(true).'"'."<br />" ;
    echo 'echo (true+true) renvoi "'.(true+true).'"'."<br /><br />" ;
     
    $a=true;
    echo 'pour $a=true :'."<br />";
    intval($a);
    echo 'avec intval($a), $a vaut "'.$a.'" et est un '.gettype($a)."<br />";
    $a1=intval($a);
    echo 'avec $a1=intval($a), $a vaut "'.$a.'" et est un '.gettype($a)."<br />";
    echo 'avec $a1=intval($a), $a vaut "'.$a1.'" et est un '.gettype($a1)."<br /><br />";
     
    $b=true;
    echo 'pour $b=true :'."<br />";
    (int)$b;
    echo 'avec (int)$b, $b vaut "'.$b.'" et est un '.gettype($b)."<br />";
    $b1=(int)$b;
    echo 'avec $b1=(int)$b, $b vaut "'.$b.'" et est un '.gettype($b)."<br />";
    echo 'avec $b1=(int)$b, $b vaut "'.$b1.'" et est un '.gettype($b1)."<br /><br />";
     
    $c=true;
    echo 'pour $c=true :'."<br />";
    settype($c,"integer");
    echo 'avec settype($c,"integer"), $c vaut "'.$c.'" et est un '.gettype($c)."<br /><hr />";

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 13h11
  2. sum(XPATH) retourne NaN
    Par TOM-Z dans le forum XMLRAD
    Réponses: 4
    Dernier message: 19/03/2003, 14h48
  3. Réponses: 2
    Dernier message: 06/03/2003, 17h37
  4. Retourner un talbeau
    Par taupin dans le forum C
    Réponses: 7
    Dernier message: 19/01/2003, 05h22
  5. [Manip de fichiers] Fonction retournant des infos
    Par sans_atouts dans le forum C
    Réponses: 3
    Dernier message: 24/07/2002, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo