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 :

Fonctionnement de l'opérateur logique ET


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 89
    Points : 83
    Points
    83
    Par défaut Fonctionnement de l'opérateur logique ET
    Bonsoir
    Ceci est une question générale.

    Dans la condition (A and B) ou (A && B) il suffit que A soit faux pour que la condition soit fausse.
    Or dans mon interpréteur PHP, même si A est faux, il évalue B.
    Dans d'autres interpréteurs (tel C ou Basic), je n'avais jamais rencontré cela et je me suis toujours appuyer sur le fait que B n'a besoin d'être évalué que si A est vrai, dans mon codage de condition
    Ex :
    Si (Identifiant de la session n'est pas vide) et Si (Est-ce que la session est complète)
    alors je peux inscrire un nouveau participant

    Ce qui est moins lourd que

    Si (Identifiant de la session n'est pas vide)
    alors
    Si (Est-ce que la session est complète)
    alors je peux inscrire un nouveau participant

    Avez-vous déjà vérifier cela?
    Claude

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Salut,

    Supprimes les erreurs si tu ne veux pas qu'elles s'affichent. Mais au sens strict on ne peut évaluer que des variables qui existent.

    Et encore là tu manges ton pain blanc (comme disaient les anciens), car quand tu iras faire un tour du côté de javascript tu ne pourras pas faire simplement if (isset($tab['index'])) mais tu devras faire l'équivalent de if(isset($tab) && isset($tab['index'])).

    Tout le monde dit que php est sans aucun doute le langage de programmation le plus accessible. Si c'est ça qui t'effraies faut arrêter la prog tout de suite. Juste pour dire qu'il faut respecter les conventions dans chaque langage sans nécessairement toujours vouloir comparer avec ceux que l'on connait déjà car c'est improductif.

    Chaque langage a ses spécificités et faut pas s'offusquer que tous ne soient pas identiques car ils ne sont pas tous destinés aux mêmes usages. Par exemple des langages web comme javascript et php sont par nature faiblement typés. C'est très pratique pour le web, mais bon nombre de développeurs venant d'autres langages vont jurés leurs grands dieux et considérer cela comme une tare rédhibitoire. Peu importe ces avis sectaires on a déjà fait malgré tout plusieurs centaines de millions de sites web avec ces langages...

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

    là où tu te trompes sans doute, c'est que (A and B) et (A && B) fonctionnent différemment.
    Voir : PHP - Opérateurs logiques

    Mais montres-nous d'abord comment tu écris en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( Si (Identifiant de la session n'est pas vide) et Si (Est-ce que la session est complète) )

  4. #4
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 89
    Points : 83
    Points
    83
    Par défaut
    Merci, jreaux62
    Effectivement , l'exemple du lien montre que l'évaluation d'une proposition logique s'arrête dès qu'on a le résultat sûr.

    Aussi, voici un extract code, il est particulièrement simplifié, espérons que cela suffira
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		if ((empty($id_bulldet) or $id_bulldet == 0) and  ( !$TraitInscription->is_session_complete($id_act)) 
    			// traitement de creation  car je n'ai pas de ligne de bulletin et l'activité demandée n'est pas complète
    Dans le cas and ou même ||, la méthode is_session_complete est évaluée même en cas de modification ($id_bulldet > 0). Notez pour la compréhension logique, que is_session_complete permet à l'utilisateur de faire ce qu'il doit faire en cas d'activité complète.

    Pourquoi est ce que cela ne se passe pas comme dans le cas $c de l'exemple?
    Claude

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

    1/ il faut d'abord que tu connaisses bien le fonctionnement des fonctions.


    Détermine si une variable est considérée comme vide.
    Une variable est considérée comme vide si elle n'existe pas, ou si sa valeur équivaut à FALSE.
    La fonction empty() ne génère pas d'alerte si la variable n'existe pas.

    Ce qui suit est considéré comme étant vide :

    • "" (une chaîne vide)
    • 0 (0 en tant qu'entier)
    • 0.0 (0 en tant que nombre à virgule flottante)
    • "0" (0 en tant que chaîne de caractères)
    • NULL
    • FALSE
    • array() (un tableau vide)
    • $var; (une variable déclarée, mais sans valeur)

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (empty($id_bulldet) or $id_bulldet == 0)
    s'écrit simplement
    2/ Ensuite, connaitre La précédence des opérateurs.
    En l'occurence, la différence entre :
    • AND et &&
    • OR et ||

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Au passage "AND" et "OR" sont des opérateurs qui ne sont quasiment jamais utilisés (comportement non "standard" donc très risqués). Certains développeurs les utilisent en mettant de gros commentaires pour justifier leur emploi, perso je préfère ne jamais les utiliser et faire l'équivalent avec les opérateurs "standard". Tu devrais très rarement les retrouver dans des exemples de code php sur le web.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Je ABCIWEB.
    Maitriser la logique des opérateurs est à laisser aux pro.

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Et encore je suis a peu près certain qu'un sondage chez les pros donnerait le même résultat, peut être même encore plus marqué parce qu'on a toujours intérêt à standardiser le code pour favoriser la relecture/maintenance

    Dans le même ordre d'idée l'utilisation de l'opérateur ternaire est à réserver aux conditions simples, sinon c'est vite casse gueule et de toute façon on perd l'avantage de lisibilité que c'est sensé apporter.

  9. #9
    Membre à l'essai
    Homme Profil pro
    autodidacte
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 19
    Points
    19
    Par défaut différence entre AND et &&
    Bonjour,
    En utilisant AND chaque terme est évalué alors qu'en utilisant && dès qu'un terme retourne FALSE les autres termes seront ignorés car le résultat sera FALSE.
    D'où l'intérêt de mettre en premier celui qui a le plus de chance d'être à FALSE pour optimiser le code.

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce n'est pas vrai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FALSE AND foo(); // foo() n'est pas executée

Discussions similaires

  1. Opérateurs logiques en C
    Par bandit boy dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/07/2006, 14h16
  2. Opérateurs logiques: solution plus simple?
    Par p0Kep0K dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/04/2006, 16h48
  3. [Débutant] fonctionnement de l'opérateur >>>
    Par kloss dans le forum Langage
    Réponses: 3
    Dernier message: 25/02/2006, 16h35
  4. [VBA] Condition - opérateurs logiques
    Par Virgile59 dans le forum Access
    Réponses: 6
    Dernier message: 07/10/2005, 11h22

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