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 :

(bool)0 !== FALSE : Soucis de ccompréhension


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut (bool)0 !== FALSE : Soucis de ccompréhension
    Bonjour,

    J'aurai aimé saisir quelque chose que je trouve important.

    PHP, lors d'un cast en booléen, convertit tout les chiffres/nombres différent de 0 en true et le chiffre 0 en false.

    retourne true
    retourne false

    Dans la mise en pratique , ça ma posé soucis avec le filtre_var. filtre_var retourne l'entier en paramètre si ok , false sinon.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(filter_var(0,FILTER_VALIDATE_INT,array('options' => array('min_range' => 0, 'max_range' => 100)))!==FALSE)
    Ici, en rajoutant !== , cela retourne true avec l'entier 0.

    !== permet de comparer le resultat et le type. Du coup , si j'ai bien compris, on compare l'entier 0 au booléen false , ok car ce n'est pas égal , donc (bool) true renvient donc true ?

    Cela me pose soucis

  2. #2
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut
    Il me semble que tu devrais plutôt utiliser l'opérateur "!=" plutôt que "!=="

    Et la tout simplement, si ta fonction retourne 0 (qui est l'équivalent de false) alors ce n'est pas différent de FALSE, on ne passe pas dans ton if
    Si ta fonction retourne une valeur quelconque, donc ton if est OK.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Le != ne passe pas.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne comprends pas ton problème.
    0 est valide dans les condition de ton filtre de vérification.
    La fonction renvoit donc 0 et ta condition if est validée.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le truc qui me gère c'est que dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(filter_var(0,FILTER_VALIDATE_INT,array('options' => array('min_range' => 0, 'max_range' => 100)))!==FALSE) echo 'ok'; else echo 'non';
    cela écrit "ok"

    Mais si j'enlève un seul égal , pour qu'il y ait != FALSE , le 0 ne passe plus. D'ou le fait de comparer le type également avec !==.

    Du coup, il y a une histoire ce cast, et j'aurai bien aimé savoir comment cela se passe exactement .

    filter retourne int(0) et nous avons la comparaison avec FALSE. Mais qu'est ce qu'il se passe en premier ? LE cast de int(0) en false , ou bien la comparaison de int(0) au false puis le cast ?

  6. #6
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut
    Je ne suis pas sûr de ce que tu veux dire, mais si j'ai bien compris, tu demandes si lors d'une comparaison dans une structure conditionnelle, les cast (par exemple bool(0) ) sont effectués avant la comparaison avec une valeur ?

    Si c'est bien ca te question, je te répondrais que toutes ta ligne est éxécutée avant d'être comparée, donc dans ton exemple avec filter_var(), le résultat final (retour de la fonction casté) est comparé suivant ton opérateur, à la valeur FALSE.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Donc si je te suis ,

    La fonction retourne int(0) , on le cast , ce qui devient FALSE , puis on vérifie s'il est !== FALSE. Mais vu que int(0) est casté en boléen false, il n'est donc pas différent de false , donc on devrait écrire "non" en passant par le else

  8. #8
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut
    Citation Envoyé par tchoumo Voir le message
    Donc si je te suis ,

    La fonction retourne int(0) , on le cast , ce qui devient FALSE , puis on vérifie s'il est !== FALSE. Mais vu que int(0) est casté en boléen false, il n'est donc pas différent de false , donc on devrait écrire "non" en passant par le else
    Es-tu sûr de la valeur que retourne ta fonction filter_var() ?
    Et puis normalement FALSE est assimilé à un int 0, donc tu n'as pas besoin de caster (cf. PHP reference)

    Tu as essayé d'afficher la valeur de retour de ta fonction filter_var ? Ca donne quoi ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    J'avais dis au premier post que filtre_var retourne l'entier si true , false sinon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(filter_var(22,FILTER_VALIDATE_INT,array('options' => array('min_range' => 0,'max_range' => 100))));
    renvoie int(22)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(filter_var(444,FILTER_VALIDATE_INT,array('options' => array('min_range' => 0,'max_range' => 100))));
    renvoie bool false

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(filter_var(0,FILTER_VALIDATE_INT,array('options' => array('min_range' => 0,'max_range' => 100))));
    renvoie int(0)

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si tu utilises !=, ton resultat 0 est converti en boléen, ce qui donne FALSE.
    Ton 0 est donc refusé à tord.

    Si tu utilises !==, il n'y pas de conversion, ton 0 etant un entier, il est différent de FALSE.
    Ton 0 est donc accepté.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Invité
    Invité(e)
    Par défaut
    Pourquoi il n y a pas de conversion ?

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ca oterait un peu l'interet de la comparaison du type.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bon , au final j'ai qu'à me dire :

    0 != FALSE --> Faux , car 0 équivaut à false

    0 !== FALSE --> Vrai, car même si 0 équivaut à false, 0 reste un entier , pas un booléen.

    Je vais pas me casser la tête plus que ça.

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    En résumé c'est tout à fait ça.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/03/2014, 12h16
  2. bool (false) pdo
    Par stade13 dans le forum Langage
    Réponses: 2
    Dernier message: 04/03/2013, 11h09
  3. [MySQL] Select Count retourne un bool à false ?
    Par old_pierre dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/01/2012, 09h34
  4. bool(false) variable vide
    Par thomix68 dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2011, 12h12
  5. Réponses: 2
    Dernier message: 03/10/2002, 17h24

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