Utilisation du OR

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Utilisation du OR

par sfourre » 08 août 2006, 19:06

En conclusion,

Pour moi, OR, AND, XOR ou NAND sont des opérations bouléenne de base (calcul en base 2).

Donc une petite explication sur ma démarche s'impose.

Quand j'utilise ce code :
$bGestMemb = ($obSes->fctSessionDroit(ADHERENT) or $obSes->fctSessionDroit(ADMIN)); 
Je calcule une variable ($bGestMemb) : tout simplement je regarde si le lecteur de la page a les droits que j'ai prédéfinis ADHERENT ou ADMIN.

J'utilise ce code lorsque j'ai besoin de cette information à divers endroits de ma page.


Par contre si j'utilise cette information une seule fois dans le script de ma page j'utilise le code :
if ($obSes->fctSessionDroit(ADHERENT) or $obSes->fctSessionDroit(ADMIN))
{
....un segment de code....
}
Mais comme l'a fort justement proposé Cyrano, dans le premier cas j'aurai pu utiliser :
$bGestMemb = ($obSes->fctSessionDroit(ADHERENT) or $obSes->fctSessionDroit(ADMIN)) ? true : false; 
Dans un code la lisibilité est très importante, mais comme l'illustre nos échanges ci-dessus, nous ne lisons pas tous pareil.

Amicalement

Stéphane

par Ryle » 08 août 2006, 00:54

Tant qu'on y est, il y a également un XOR qui existe. Non, je ne parle pas du sheriff de l'espace mais du "ou exclusif" (eXclusive OR) qui vérifie que une seule seulement des conditions est réalisée :

variable = (TRUE xor TRUE); // variable = FALSE
variable = (TRUE xor FALSE); // variable = TRUE
variable = (FALSE xor TRUE); // variable = TRUE
variable = (FALSE xor FALSE); // variable = FALSE

par Cyrano » 07 août 2006, 20:48

Avec un "OU" il suffit qu'une valeur soit Vrai pour que l'ensemble soit Vrai
Avec un "ET" il faut que toutes les valeurs soient Vrai pour que l'ensemble soit Vrai
Ha ben là c'est beaucoup plus simple et donc mon intuition était juste: c'est une question de conventions. Suffit de le savoir :)

par Truc » 07 août 2006, 20:39

Ce sont des conventions => Table de vérité

Avec un "OU" il suffit qu'une valeur soit Vrai pour que l'ensemble soit Vrai

variable = (TRUE ou TRUE); // variable = TRUE
variable = (TRUE ou FALSE); // variable = TRUE
variable = (FALSE ou TRUE); // variable = TRUE
variable = (FALSE ou FALSE); // variable = FAUX


Avec un "ET" il faut que toutes les valeurs soient Vrai pour que l'ensemble soit Vrai

variable = (TRUE et TRUE); // variable = TRUE
variable = (TRUE et FALSE); // variable = FAUX
variable = (FALSE et TRUE); // variable = FAUX
variable = (FALSE et FALSE); // variable = FAUX

Il n'y a pas de vrai opération juste des règles à appliquer.

par Cyrano » 07 août 2006, 19:40

Alors reprenons mon exemple pour les lignes 2 et 3 (si on admet la validité des lignes 1 et 4) :
variable = (TRUE ou FALSE); // variable = TRUE
variable = (FALSE ou TRUE); // variable = TRUE

Tu dis fort justement que ça revient à faire :
variable = if(TRUE OR FALSE); // grossièrement pour simplifier
Et le if retourne en fait un booléen. Mais encore faudrait-il qu'entre les parenthèses il y ait une opération ou une comparaison. Mais là, on a un OR : quelle est donc l'opération entre les deux booléens ? C'est ça qui me chagrine un peu dans cette syntaxe :-k

par Ryle » 07 août 2006, 15:58

Ah vi, en effet je l'ai pas dit clairement, mais il faut les parenthèses pour que ca marche (y a de grandes chances qu'il face une erreur de syntaxe sinon)

En fait, cela fonctionne comme dans un if ou dans l'opérateur ternaire : le contenu de la parenthèse est évalué et retourne une valeur qui est "vrai" ou "faux". Cette valeur est ensuite interprétée pour savoir s'il exécute le code associé ou non dans le cas du if.

En gros, un if() revient à dire "Si le résultat de la parenthèse est vrai" je rentre dedans. Le truc est simplement de récupérer et stocker "le résultat de la parenthèse" pour le réutiliser ultérieurement. Ca permet simplement de définir un booléen :)

C'est pour ça que l'opérateur ternaire me paraissait un peu lourd, dans la mesure ou tu vas tester si un résultat est vrai pour retourner vrai. Autant prendre le résultat directement. Après c'est effectivement une question de gout, et comme tu le dis, faut juste savoir que ça existe :)
(personnellement j'ai mis un moment à me faire à l'opérateur ternaire, et ai longtemps préféré le if avant de succomber au charme du gain de place et à la facilité de lecture ;))

par Cyrano » 06 août 2006, 20:52

C'est sans aucun doute une question de convention, suffit de le savoir. Je crois que je vais quand même en rester à l'opérateur ternaire, ça me semble (pour ma part) beaucoup plus logique. :-k

par sfourre » 06 août 2006, 20:46

Pour moi c'est booléen, mais être notre incompréhention vien elle de là
variable = (TRUE ou TRUE); // variable = TRUE
variable = (TRUE ou FALSE); // variable = TRUE
variable = (FALSE ou TRUE); // variable = TRUE
variable = (FALSE ou FALSE); // variable = FAUX

Stéphane

par Cyrano » 06 août 2006, 20:38

Je veux bien, mais ça ne résoud pas la question : que vaut variable pour chacune de ces lignes en fin de compte ?

Code : Tout sélectionner

variable = (VRAI ou VRAI); // variable = VRAI ? variable = (VRAI ou FAUX); // variable = ?????? variable = (FAUX ou VRAI); // variable = ?????? variable = (FAUX ou FAUX); // variable = FAUX ?

par sfourre » 06 août 2006, 19:31

Vous avez tout à fait raison Cyrano.

Dans ma volonté de simplifier ma question, j'en ai oublié le contexte.

Avec le code ci-dessous, placé en début de page, qui fonctionne donc maintenant :
$bGestMemb = ($obSes->fctSessionDroit(ADHERENT) or $obSes->fctSessionDroit(ADMIN));  
Je teste si la personne qui la visite a les droits requis (ADHERENT et ADMIN dans ce cas y sont autorisé).

Je teste ensuite $bGestMemb pour connaître les droits.

Amicalement

Stéphane

par Cyrano » 06 août 2006, 18:11

Le code
PHP:
<?php $res = ($varA OR $varB);

est normalement tout aussi efficace
Cette syntaxe me fatigue quelque peu, ça revient à faire :
variable = ((varA == VRAI) ou (varB == VRAI));
Dans mon esprit, ça ne veut rien dire, parce qu'on peut alors traduire par:
- variable = (VRAI ou VRAI);
-ou variable = (VRAI ou FAUX);
-ou variable = (FAUX ou VRAI);
-ou variable = (FAUX ou FAUX);
On est drôlement avancés là :-k

Il est possible qu'en C ça fonctionne, mais je ne comprends pas plus, si quelqun peut m'expliquer, ça m'intéressae au plus haut point :-s

par sfourre » 06 août 2006, 18:10

Bon finallement à vous lire j'ai gratté un peu :

Ceci ne fonctionne pas :
$bGestMemb = $obSes->fctSessionDroit(ADHERENT) or $obSes->fctSessionDroit(ADMIN); 
Alors que ceci fonctionne !!!
$bGestMemb = ($obSes->fctSessionDroit(ADHERENT) or $obSes->fctSessionDroit(ADMIN));  
Merci à tous de votre aide.

Amicalement

Stéphane

par sfourre » 06 août 2006, 18:03

Non Ryle, je suis désolé.

Effectivement il manque un espace et un point virgule.

En fait pour présenter clairement mon propos j'ai volontairement simplifié mon source.

En fait mon vrai source était :
$bGestMemb = $obSes->fctSessionDroit(ADHERENT) or $obSes->fctSessionDroit(ADMIN);
ou mes 2 fonctions retournent TRUE ou FALSE.

Cela ne fonctionne malheureusement pas sous cette forme, je suis obligé de passer par un test conditionnel.

Amicalement

Stéphane

par Ryle » 06 août 2006, 17:16

Je pense que le soucis vient également de l'espace, voire de l'absence de point virgule au bout de certaines lignes.

L'opérateur ternaire fonctionne mais n'a aucun intérêt à mon avis dans la mesure ou l'on test un booléen : Si "vrai" est "vrai", alors retourne "vrai" ? ;)

Le code
$res = ($varA OR $varB);
est normalement tout aussi efficace :)

Re: Utilisation du OR

par @rthur » 06 août 2006, 11:30

Bonjour,

Je ne sais pas si ça résoudra le problème, mais l'espace entre le dollar et le nom de ta variable me semble étrange:
$ varB