Page 1 sur 2

Utilisation du OR

Posté : 06 août 2006, 11:01
par sfourre
Une petite question dominicale :

Pouvez vous me dire pourquoi l'exemple cid-essous ne me donne pas $res = TRUE (alors que me semble t'il en C, cela fonctionne) :
<?php
$varA = TRUE
$varB = FALSE

$res = $varA OR $ varB
?>
Alors que ici cela fonctionne :
<?php
$varA = TRUE
$varB = FALSE

if ($varA OR $ varB)
{
$res = TRUE
}
?>
Bon techniquement, pas soucis, mais je préfairais la prmière solution car plus élégante.

Amicalement

Stéphane

Posté : 06 août 2006, 11:06
par Cyrano
Alternative : un opérateur ternaire:
<?php
$varA = TRUE
$varB = FALSE

$res = ($varA OR $varB) ? true : false;
?>

Posté : 06 août 2006, 11:28
par sfourre
Une solution que vous m'aviez déjà suggérée Cyrano.

Encore merci.

Amicalement

Stéphane

Re: Utilisation du OR

Posté : 06 août 2006, 11:30
par @rthur
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

Posté : 06 août 2006, 17:16
par Ryle
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 :)

Posté : 06 août 2006, 18:03
par sfourre
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

Posté : 06 août 2006, 18:10
par sfourre
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

Posté : 06 août 2006, 18:11
par Cyrano
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

Posté : 06 août 2006, 19:31
par sfourre
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

Posté : 06 août 2006, 20:38
par Cyrano
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 ?

Posté : 06 août 2006, 20:46
par sfourre
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

Posté : 06 août 2006, 20:52
par Cyrano
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

Posté : 07 août 2006, 15:58
par Ryle
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 ;))

Posté : 07 août 2006, 19:40
par Cyrano
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

Posté : 07 août 2006, 20:39
par Truc
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.