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

EDI, CMS, Outils, Scripts et API PHP Discussion :

anomalie apparente dans fonction if


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 27
    Points : 32
    Points
    32
    Par défaut anomalie apparente dans fonction if
    Bonjour,

    Je viens de découvrir un truc bizarre (enfin pour moi):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    $mavar=0;
     
    if ($mavar=="passe")
    {
    echo "<br>dans if";
    }
    ELSE
    {
    echo "<br>dans else";
    }
    réponse du programme: "dans if" (alors qu'on devrait avoir, me semble-t-il "dans else")

    Si je donne à $mavar la valeur 3 au lieu de 0, là ça fonctionne normalement et j'obtiens la réponse "dans else"

    Quelqu'un a-t-il une explication.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 426
    Points : 43 045
    Points
    43 045
    Par défaut
    Tu déclare une variable numérique via :
    Tu fais ensuite une comparaison entre une chaine de caractères et un nombre :
    Déjà c'est faux. En C tu n'aurais pas pu compiler. PHP te laisse faire car les variables ne sont pas typées. Il convertit alors ta chaine en valeur numérique avant de faire la comparaison avec $mavar, ce qui te donne un résultat non voulu.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    C'est exactement ce qui est prévu par la documentation:
    Si vous comparez un nombre avec une chaîne ou bien que la comparaison implique des chaînes numériques, alors chaque chaîne sera convertie en un nombre et la comparaison sera effectuée numériquement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    var_dump((int) "passe");
    //résultat: int(0)
    C'est pour cette raison qu'on conseille de toujours utiliser === au lieu de ==, à moins d'avoir une très bonne raison. == force un transtypage, dont les résultats ne sont toujours pas évidents.

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

Discussions similaires

  1. [JSP]retour a la ligne dans fonction mailto
    Par logica dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 19/04/2006, 01h50
  2. [J2SE] intérêt du final dans : fonction( final int arg) ?
    Par guile.rondins dans le forum Langage
    Réponses: 4
    Dernier message: 20/07/2005, 16h03
  3. Problème de date dans fonction utlisateur
    Par lutin2003 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2005, 16h25
  4. Switch dans fonction membre
    Par Raish dans le forum C++
    Réponses: 11
    Dernier message: 30/03/2005, 14h41
  5. Réponses: 5
    Dernier message: 13/08/2004, 15h40

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