Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2011, 11h42   #1
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

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

Informations forums :
Inscription : janvier 2009
Messages : 246
Points : 235
Points : 235
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 :
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
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 12h55   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
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 :
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).
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 13h24   #3
Membre éprouvé
 
Homme romain escudier
Développeur informatique
Inscription : juin 2011
Messages : 300
Détails du profil
Informations personnelles :
Nom : Homme romain escudier
Âge : 22
Localisation : France, Ille et Vilaine (Bretagne)

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

Informations forums :
Inscription : juin 2011
Messages : 300
Points : 471
Points : 471
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 :
return ($a & $b != 0 ? $a & $b : Sinon quoi?);
Sachant que je ne comprends pas ce que ça retourne dans ce cas la
__________________
Pas de solution, pas de probleme

Une réponse utile (ou +1) le pouce vert
Une réponse à votre question

skeud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 13h44   #4
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

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

Informations forums :
Inscription : janvier 2009
Messages : 246
Points : 235
Points : 235
Citation:
Euh je pense pas que ça soit ça la question, mais plutot le "!=0" en dehors des parenthese.
Merci skeud
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 13h49   #5
Membre éprouvé
 
Homme romain escudier
Développeur informatique
Inscription : juin 2011
Messages : 300
Détails du profil
Informations personnelles :
Nom : Homme romain escudier
Âge : 22
Localisation : France, Ille et Vilaine (Bretagne)

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

Informations forums :
Inscription : juin 2011
Messages : 300
Points : 471
Points : 471
Et tu as vu ça ou? le retour de cette fonction donne quoi lorsque tu l'appelle?
une valeur ou un true/false?
__________________
Pas de solution, pas de probleme

Une réponse utile (ou +1) le pouce vert
Une réponse à votre question

skeud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 13h52   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 13h55   #7
Membre éprouvé
 
Homme romain escudier
Développeur informatique
Inscription : juin 2011
Messages : 300
Détails du profil
Informations personnelles :
Nom : Homme romain escudier
Âge : 22
Localisation : France, Ille et Vilaine (Bretagne)

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

Informations forums :
Inscription : juin 2011
Messages : 300
Points : 471
Points : 471
En php les parenthese sur un return ne sont pas obligatoire?

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

Citation:
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.
Citation:
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 :
return (($a & $b) != 0);
Donc à:

d'après la doc
__________________
Pas de solution, pas de probleme

Une réponse utile (ou +1) le pouce vert
Une réponse à votre question

skeud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 13h59   #8
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
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).
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 17h04   #9
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

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

Informations forums :
Inscription : janvier 2009
Messages : 246
Points : 235
Points : 235
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
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 17h11   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 17h16   #11
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

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

Informations forums :
Inscription : janvier 2009
Messages : 246
Points : 235
Points : 235
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 ?
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 18h00   #12
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
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
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 18h42   #13
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

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

Informations forums :
Inscription : janvier 2009
Messages : 246
Points : 235
Points : 235
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
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 21h43   #14
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

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

Informations forums :
Inscription : janvier 2009
Messages : 246
Points : 235
Points : 235
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)) {...}
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 08h45   #15
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
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
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 10h39   #16
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

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

Informations forums :
Inscription : janvier 2009
Messages : 246
Points : 235
Points : 235
Non car en fait c'est un peu plus compliqué que ça. Mais on s'éloigne du sujet
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 10h50   #17
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Ah je vois, tu dois avoir un singleton ou quelque chose comme ça non ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h21.


 
 
 
 
Partenaires

Hébergement Web