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 :

Priorité des opérateurs


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut Priorité des opérateurs
    Bonjour,

    Je suis tombé aujourd'hui sur un morceau de code PHP qui m'intrigue. C'était quelque chose du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $a == 'un texte' && $b = foo()
    Je vois bien ce que fais ce code, (affectation de la valeur de retour de foo() à $b puis comparaison avec $a == 'un texte' ).

    Le seul problème c'est que logiquement ça ne colle pas avec la priorité des opérateurs. Le '&&' est bien plus prioritaire que le '=', non?

    Donc comment PHP fait il pour s'y retrouver? Il joue sur le fait que le membre de gauche de l'affection est toujours un seul éléménent (une variable) ?

    Merci d'avance à ceux qui pourraient m'apporter des éclaircissements.

  2. #2
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    a priori, je dirais que oui
    pour moi, cette expression est équivalente à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ($a == 'un texte') && ($b = foo())
    mais je ne peux pas te le prouver de façon scientifique

  3. #3
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Dans la documentation de PHP sur la précédence des opérateurs, c'est indiqué explicitement que
    Utilisez les parenthèses pour augmenter la lisibilité du code.

    Note: Bien que ! soit prioritaire sur =, PHP va tout de même exécuter des expressions comme : if (!$a = foo()). Dans cette situation, le résultat de foo() sera placé dans la variable $a.
    lien : http://fr.php.net/manual/fr/language...ors.precedence

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Ok, merci. J'ai été voir un peu les commentaires des utilisateurs sur la page du manuel PHP, mais on n'y retrouve pas grand chose qui explique pourquoi ce genre d'écriture passe en PHP. Apparement la priorité est appliquée sauf dans certains cas particuliers qui ne sont pas tous listés, comme pour le (!$a = foo()).

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

Discussions similaires

  1. priorité des opérateurs
    Par new_wave dans le forum Langage
    Réponses: 3
    Dernier message: 02/12/2008, 12h09
  2. Priorité des opérateurs % et ++
    Par G3G3 dans le forum Débuter
    Réponses: 16
    Dernier message: 12/02/2008, 09h40
  3. [OCaml & F#] Priorité des opérateurs
    Par SpiceGuid dans le forum Caml
    Réponses: 7
    Dernier message: 01/01/2008, 15h00
  4. priorité des opérateurs
    Par new_wave dans le forum SQL
    Réponses: 13
    Dernier message: 08/11/2007, 21h44
  5. Réponses: 3
    Dernier message: 31/08/2006, 10h39

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