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 :

Je ne comprend pas les if sans les opérateurs


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut Je ne comprend pas les if sans les opérateurs
    Bonjour
    Je suis débutante en PHP et je ne comprend pas certaines conditions du "if". Je prépare un entretien avec un test php. Je ne comprends pas bien les if sans opérateurs ( <; >;=; != ).
    Par exemple on écrit souvent Voici les exemples en dessous sur les if que je ne comprend pas. Merci beaucoup de vos explications.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $a="a";
    $b="b";
    if(strcmp($a, $b)){
    	echo $a.''.$b;
    }elseif($a = $b){
    	echo "addition";
    }else{
            echo $a.'different'.$b;
    }		
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $a=1;
    $b=1;
    $c=$a ^ $b;
    $a=0;
    if($c){
          $b=2;
    }else{
           $b=3;
    }
    $c=$b | $a;
    ?>
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  2. #2
    Membre du Club
    Homme Profil pro
    Formation Cnam
    Inscrit en
    Octobre 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Formation Cnam

    Informations forums :
    Inscription : Octobre 2015
    Messages : 27
    Points : 50
    Points
    50
    Par défaut
    Bonjour,
    1 équivaut à true,

    quand à strcmp elle renvoie des chiffres qui sont évalué. Par exemple 0=false et une string est toujours équivalente à true. Par contre je sais pas pour les chiffres négatifs et ceux différents de 1.

    Bonne question en tout cas

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1/ ça commence mal...
    la syntaxe est FAUSSE !

    $a=1 est une affectation de valeur à la variable $a !
    Pour une condition :
    2/ Idem dans l'exemple 2 :
    3/ Une condition est :
    • soit vraie => true ou 1
    • soit fausse => false ou 0



    Donc :
    on évalue si $c est vrai ou fausse (ici, si ça vaut 1 ou 0).

  4. #4
    Membre du Club
    Homme Profil pro
    Formation Cnam
    Inscrit en
    Octobre 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Formation Cnam

    Informations forums :
    Inscription : Octobre 2015
    Messages : 27
    Points : 50
    Points
    50
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if($a=1){echo'oui';}

    Php ne soulève pas d'erreur ici néanmoins mais ça prête à confusion

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Euh, c'est normal qu'une affectation de variable ne soulève pas d'erreur. Cela reste une faute très commune de débutant (d'oublier un =), et c'est des erreurs difficiles à intercepter surtout quand on passé des heures et des heures sur le même bout de code... Dans ce cas, il vaut mieux largement laisser reposer et y revenir après.

    Par contre, la comparaison nécessite soit 2 == (comparaison simple) soit 3 === (comparaison typée) :

    Tout est expliqué noir sur blanc dans la doc par ici

  6. #6
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Merci à tous de vos explications. J'ai compris mon premier. Mais je comprend pas encore le 2ème, celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $a="a";
    $b="b";
    if(strcmp($a, $b)){
    	echo $a. ' ' .$b;
    }elseif($a + $b){
    	echo "addition";
    }else{
            echo $a.'different'.$b;
    }		
    ?>
    Le résultat m'affiche : a b
    Pourquoi ? C'est surtout cette partie que je ne comprend pas.
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Vu que tu débutes, réfère toi dès que tu peux à la doc de PHP, elle est complète et souvent les commentaires sont très intéressants. strcmp()
    Dans ton code, si tu poses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $a = "a";
    $b = "b";
    $c = strcmp($a, $b);
    tu vas voir que $c vaudra -1, d'après la doc :
    Retourne < 0 si str1 est inférieure à str2; > 0 si str1 est supérieure à str2, et 0 si les deux chaînes sont égales.
    cela veut tout simplement dire que "a" est inférieur à "b".
    Donc ton code d'exemple, l'embranchement pris est celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(strcmp($a, $b)){
        echo $a. ' ' .$b;
    NB: pour voir ce qui est évalué à false par le moteur PHP, regarde ici
    Et la valeur de $c : -1 est évaluée à true

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    Citation Envoyé par AS_PTT Voir le message
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if($a=1){echo'oui';}

    Php ne soulève pas d'erreur ici néanmoins mais ça prête à confusion
    Il faut toujours mettre les constantes à gauche.
    Un symbole = oublié et on se retrouve avec un bug chiant à chiant à débugguer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if($a==1) // vrai si $a vaut 1. En language naturel on traduit ça par : "est ce que $a est égal à 1 ?"
    if(1==$a) // pareil,vrai si $a vaut 1. Ca s'appelle la notation Yoda, en référence à l'élocution de Yoda dans Starwars 
     
    if($a=1) // toujours vrai vu que c'est une affectation
    if(1=$a) // renvoie une erreur
    Et accessoirement c'est le genre de détail qui permet de repérer un développeur qui code mal.

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 84
    Points : 83
    Points
    83
    Par défaut
    tu peux aussi l'utiliser pour vérifier si $a est true, php ne soulève pas d'erreur car ça n'en est pas réellement une

    et tu peux aussi l'écrire sous cette forme, ça passe si tu n'as qu'une instruction à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //bon
    if($a=1)
       echo'oui';
    else
       echo 'non';
    //faux
    if($a=1)
       echo 'oui';
       echo '2eme echo'; // ne passe pas dans le if
    c'est agréable de se passer des accolades de temps en temps
    Sans pomme nous n'aurions jamais découvert la gravité... Sans tête Non plus.

  10. #10
    Invité
    Invité(e)
    Par défaut
    @robin52
    Merci de lire les AUTRES réponses précédentes, pour éviter d'écrire des contre-sens et autres inepties.

    1/
    • $a=1 N'EST PAS une comparaison, mais une affectation.
    • $a==1, EST une comparaison.

    2/ Quant à "se passer des accolades", c'est juste, mais source d'erreur (d'inattention souvent...), comme le soulève ton 2ème exemple.
    Donc, tant qu'à (bien) faire, autant toujours les mettre.

    3/ On peut quand même parler de la Syntaxe alternative if():... else: ... endif; :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    if ($a == 5):
        echo "a égale 5";
        echo "...";
    elseif ($a == 6):
        echo "a égale 6";
        echo "!!!";
    else:
        echo "a ne vaut ni 5 ni 6";
    endif;
    ?>

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($a=1)
       echo'oui';
    else
       echo 'non';
    Ca ne fonctionnera jamais, cf posts précédents

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if($a=1)
       echo 'oui';
       echo '2eme echo'; // ne passe pas dans le if
    Toujours aussi faux, et en bonus l'indentation est idéale pour induire en erreur.
    Pour éviter ce genre de choses et harmoniser les styles d'écritures, on a inventé les normes PSR1 et PSR2 : http://www.php-fig.org/psr/psr-2/ .

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/10/2010, 19h05
  2. pas de Value pour les Radios et les Checkboxs ?
    Par moechofe dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 26/03/2008, 00h10
  3. les fenetres sans les menus à gauche (XP)
    Par cherif1969 dans le forum Windows XP
    Réponses: 3
    Dernier message: 20/03/2007, 20h15

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