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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 43
    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 chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 316
    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

  3. #3
    Membre émérite

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    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...

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 316
    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

  5. #5
    Membre émérite

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    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

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 43
    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

+ 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