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 :

Comparaisons entre variables et true/false


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 43
    Points : 28
    Points
    28
    Par défaut Comparaisons entre variables et true/false
    Bonjour,

    j'aimerai comprendre un fonctionnement qui m'échappe.

    J'ai une méthode de classe qui fait un "return true" si la fonction s'est bien déroulée, ou "return $messageErreur" si une erreur s'est produite.

    Je récupère cette variable dans un script, du genre "$retour = $Classe->methode($variable)" jusque là pas de problème.

    Pourtant, quand je veux faire un

    "if($retour == true){//traitement}else{//erreurs}"

    cela ne fonctionne pas, je rentre toujours dans le else, quand bien même la méthode renvoie true à coup sûr.
    Pour le comportement soit celui que j'attends, je dois faire un "if($retour === true)".

    Quelqu'un peut-il m'expliquer pourquoi donc?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 316
    Points : 366
    Points
    366
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $retour == true; // c'est faux $retour est un booleen ; il vaut 0 ou 1
    $retour === true; // c'est vrai; comparaison de la valeur et du type
    Emmanuel
    --------------------------------------
    aucune réponse en message privé.
    les discussions doivent profiter à tous.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Ce serait pas plutôt le contraire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $var1 = true;
    $var2 = "unechaine";
     
    if ($var1 == true && $var2 == true)
        echo 'Les 2 == true';
    else if ($var1 == true)
        echo 'seul true == true';
    else if ($var2 == true)
        echo 'seul \'unechaine\' == true';
    résultat affiché : Les 2 == true

    Au contraire, l'opérateur triple égal compare également le type de l'opérande et pas seulement sa valeur castée...
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 316
    Points : 366
    Points
    366
    Par défaut
    dans le contexte, la fonction retoune un booléen.
    le fait de vérifier que $retour est bien un booléen et qu'il vaut 1 s'écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( $retour === true ) {}
    si $retour est booléen alors on peut écrire sa valeur en true ou false , mais il faut vérifier le type ( === ) comparaison valeur && type
    sinon , sans indication de type pour $retour alors sa valeur s'écrit 0 ou 1 ( == ) comparaison valeur seule
    Emmanuel
    --------------------------------------
    aucune réponse en message privé.
    les discussions doivent profiter à tous.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    $retour est un booléen 'true' ou une chaîne de caractères. C'est pour ça qu'il faut utiliser le triple égal, parce qu'une chaîne de caractères non vide est valorisée à true si elle est ramenée à un booléen.

    Mais ce que je n'ai pas compris c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $retour == true; // c'est faux $retour est un booleen ; il vaut 0 ou 1
    $retour === true; // c'est vrai; comparaison de la valeur et du type
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    Ok, si j'ai bien compris, le === sert à comparer en fonction du type également.

    Donc si j'ai

    $a = 5;
    $b = "5";

    si je compare en ==, ca sera bien égal

    si je compare en ===, ca sera différent car il distinguera que j'ai typé en numérique et en caractère?

    Moi qui pensait que le php était pas typé ^^'

    Merci de vos réponses

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    C'est ça.

    Le PHP est dit "faiblement typé". Une variable n'est pas liée à son type, l'allocation mémoire ne dépend pas du type. Mais il n'y a pas que des chaines de caractères en PHP, et bien heureusement on peut analyser le type d'une variable à un instant t !
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/10/2014, 16h31
  2. Réponses: 1
    Dernier message: 24/01/2008, 09h13
  3. Réponses: 3
    Dernier message: 07/06/2007, 22h03
  4. comparaison entre variable et type
    Par mask91 dans le forum C
    Réponses: 8
    Dernier message: 11/02/2007, 00h35
  5. Comparaison entre deux variables
    Par delavega dans le forum ASP
    Réponses: 8
    Dernier message: 23/11/2006, 16h42

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