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 :

Syntaxe inconnue dans une application [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut Syntaxe inconnue dans une application
    Bonjour tout le monde,

    J'ai trouvé une syntaxe que je ne connait pas dans une appli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function getDroits($attributDroit, $masque)
    {
    	return ($this->get($attributDroit) & $masque) != 0;
    }
    Je comprend bien qu'il s'agit d'une comparaison bit à bit des droits avec un masque, là dessus pas de problème. Ce qui m'interroge c'est le : "!= 0". Je suppose que ça signifie que l'on ne retourne le résultat que si il est différent de 0, mais je ne suis pas sûr. Mes questions : Est ce que ça signifie bien cela ?
    Est ce que cette syntaxe est correct ? Est-ce que c'est indispensable dans ce cas ?

    Merci

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    C'est ce qu'on appelle un opérateur de bit, dans ton cas c'est une opération AND. Il existe par ailleurs OR, XOR et NOR et les shifts.

    Toutes les infos sont dans le manuel, comme à chaque fois

    Le fait de faire != 0 se résume à vérifier de façon booléenne que le AND sur le bitfield par le masque n'est pas vide.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        00000011100 // bitfield
    AND 00000010000 // masque
    -----------------
        00000010000 // en base 10 ça fait 16 donc c'est bien différent de 0
     
        00000001100 // bitfield
    AND 00000010000 // masque
    -----------------
        00000000000 // en base 10 ça fait 0
    Et oui c'est indispensable car un résultat booléen est attendu (c'est d'ailleurs plus facile à exploiter qu'un int).

  3. #3
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Euh je pense pas que ça soit ça la question, mais plutot le "!=0" en dehors des parenthese.

    En gros pour un cadre général il serait possible d'écrire:

    ça me parait très étrange de voir un différent de zéro en dehors des parenthèse du return.

    bon ensuite j'ai peut-etre pas compris la réponse

    EDIT: après relecture, une tite question, ta réponse veut dire:

    reviens au même que:

    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return ($a & $b != 0 ? $a & $b : Sinon quoi?);
    Sachant que je ne comprends pas ce que ça retourne dans ce cas la

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Euh je pense pas que ça soit ça la question, mais plutot le "!=0" en dehors des parenthese.
    Merci skeud

  5. #5
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Et tu as vu ça ou? le retour de cette fonction donne quoi lorsque tu l'appelle?
    une valeur ou un true/false?

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    c'est juste, vu que l'opérateur bitwise est prioritaire sur l'opérateur booléen != tu peux enlever les parenthèses sans risque. Le fait qu'elles soient là ne change absolument rien au comportement.

  7. #7
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    En php les parenthese sur un return ne sont pas obligatoire?

    Edit: Effectivement elle ne le sont pas, et je viens de regarder:

    Notez que puisque return() est une structure de langage, et non une fonction, les parenthèses entourant les arguments ne sont pas nécessaires. Il est classique de les oublier et vous devriez le faire car PHP travaillera moins dans ce cas.
    Vous ne devriez jamais utiliser les parenthèses autour de la variable retournée lorsque vous la retournez pas référence, car cela ne fonctionnera pas. Vous ne pouvez retourner que les variables par référence, et non le résultat du traitement. Si vous utilisez return ($a);, alors vous ne retournez pas une variable mais le résultat de l'expression ($a) (qui est, bien sûr, la valeur de $a).
    ici: return php

    Alors je suis plus que surpris

    Edit2: pour répondre a ta question:

    reviens à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (($a & $b) != 0);
    Donc à:

    d'après la doc

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par skeud Voir le message
    En php les parenthese sur un return ne sont pas obligatoire?
    Bien sûr que non, ni plus qu'avec include ou require d'ailleurs (contrairement à ce qu'on voit un peu partout).

  9. #9
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    J'ai tester dans le code et ça fonctionne pareil avec ou sans : "!=0". Que signifie exactement cette expression ? est-ce que ça signifie que si le résultat est false on ne le renvoi pas ? comprend pas

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    J'arrive pas à me figurer ce qui te bloque.

    la syntaxe d'un return c'est:
    Ce que tu retourne dans ton cas c'est le résultat d'une expression booléene (valeur != 0 est un booléen). Cette expression pourrait aussi bien être une valeur, variable, void ou que sait-je encore.

    Au passage, si tu enlèves le != 0, tu renvoie un entier (le résultat de l'opération de bits) qui sera automatiquement évalué à true s'il est différent de 0 et à false sinon (typage faible du langage). En revanche, l'opérateur de comparaison stricte (===) lui ne passera pas.

  11. #11
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Ok, alors on peut enlever le "!=0" de la fonction et tester le bitwise après le renvoi de la fonction ?
    En faisant par exemple un if(getDroits($attributDroit, $masque)) {...}
    Ça fonctionne tout aussi bien ? non ?

  12. #12
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Oui, ce sera pareil.

    Sauf que tu dois avoir une instance de la classe dont tu as extrait cette méthode pour faire ça bien sûr

  13. #13
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Ok, c'est pour cela que je voyais pas trop l’intérêt du "!=0" étant donné que le bitwise est testé après le renvoi de la fonction.

    Merci Benjamin

  14. #14
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Sauf que tu dois avoir une instance de la classe dont tu as extrait cette méthode pour faire ça bien sûr
    Oui effectivement Cette petite coquille vient du fait qu'en réalité cette méthode n'est pas utilisée directement mais elle est appelée par une fonction dans le code. Ex : if(droits(Droits::$droitsBudgets, $masque)) {...}

  15. #15
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par philodido Voir le message
    Oui effectivement Cette petite coquille vient du fait qu'en réalité cette méthode n'est pas utilisée directement mais elle est appelée par une fonction dans le code. Ex : if(droits(Droits::$droitsBudgets, $masque)) {...}
    Ce qui devrait alors lever un E_NOTICE vu que la méthode n'est pas statique. Vérifie

  16. #16
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Non car en fait c'est un peu plus compliqué que ça. Mais on s'éloigne du sujet

  17. #17
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Ah je vois, tu dois avoir un singleton ou quelque chose comme ça non ?

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/07/2004, 22h30
  2. Réponses: 8
    Dernier message: 17/03/2004, 14h40
  3. Licence MySql en tant que BD dans une application web
    Par Volta dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/02/2004, 14h38
  4. fenetre dos dans une application
    Par jfb53 dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/10/2003, 18h06

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