Utilisation du OR

Eléphant du PHP | 60 Messages

06 août 2006, 11:01

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

Mammouth du PHP | 19672 Messages

06 août 2006, 11:06

Alternative : un opérateur ternaire:
<?php
$varA = TRUE
$varB = FALSE

$res = ($varA OR $varB) ? true : false;
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 60 Messages

06 août 2006, 11:28

Une solution que vous m'aviez déjà suggérée Cyrano.

Encore merci.

Amicalement

Stéphane

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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 :)

Eléphant du PHP | 60 Messages

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

Eléphant du PHP | 60 Messages

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

Mammouth du PHP | 19672 Messages

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
Modifié en dernier par Cyrano le 06 août 2006, 20:35, modifié 1 fois.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 60 Messages

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

Mammouth du PHP | 19672 Messages

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 60 Messages

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

Mammouth du PHP | 19672 Messages

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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 ;))

Mammouth du PHP | 19672 Messages

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute