[PHP] Opérateurs logiques


dorian53
WRInaute passionné
WRInaute passionné
 
Messages: 2199
Inscription: 10 Avr 2005

[PHP] Opérateurs logiques

Message le Jeu Nov 22, 2007 14:01

Bonjour,

Existe t-il une différence entre and, &&, or et || sur la longueur du test dans la condition ?

Code: Tout sélectionner
if (isset($var) and $var == 'test')

Code: Tout sélectionner
if (isset($var) && $var == 'test')


Ces 2 conditions s'executent-elles de la même façon ?
Y a t-il un test court et un test long ?
(Car sans test court ce n'est sémantiquement pas correct)

Merci.

Edit ==
Dernière édition par dorian53 le Jeu Nov 22, 2007 19:07, édité 2 fois.


mowmow
WRInaute impliqué
WRInaute impliqué
 
Messages: 975
Inscription: 3 Nov 2004

Message le Jeu Nov 22, 2007 14:16



Jeviensderio
WRInaute passionné
WRInaute passionné
 
Messages: 1340
Inscription: 29 Sep 2006

Message le Jeu Nov 22, 2007 14:30

and exécute le second test si le premier est vrai, et && exécute les deux dans tous les cas


narayana
WRInaute impliqué
WRInaute impliqué
 
Messages: 835
Inscription: 28 Jan 2005

Re: [PHP] Opérateurs logiques

Message le Jeu Nov 22, 2007 14:43

dorian53 a écrit:
Code: Tout sélectionner
if (isset($var) and $var = 'test')
ou
Code: Tout sélectionner
if (isset($var) && $var = 'test')



De plus vous allez affecter la valeur 'test' à la variable $var. Je ne pense pas que ce soit le but recherché.
Ne serait pas plutôt cela
Code: Tout sélectionner
if (isset($var) and $var == 'test')

ou encore
Code: Tout sélectionner
if (isset($var) and strcmp('test',$var) == 0)


Cordialement.

FloBaoti
WRInaute impliqué
WRInaute impliqué
 
Messages: 755
Inscription: 30 Avr 2006

Message le Jeu Nov 22, 2007 15:53

Jeviensderio a écrit:and exécute le second test si le premier est vrai, et && exécute les deux dans tous les cas

Selon la doc, ces 2 opérateurs sont identiques et ils n'exécutent la seconde condition que si la première est vraie...
Ca correspond à un "ET ALORS" dans certains langages...


Jeviensderio
WRInaute passionné
WRInaute passionné
 
Messages: 1340
Inscription: 29 Sep 2006

Message le Jeu Nov 22, 2007 16:11

En fait cela dépend de la syntaxe:

// "&&" a une précédence supérieure à "and"
$g = true && false; // $g se vera assigner à (true && false), ce qui est false
$h = true and false; // $h se vera assigner à true


Si on rajoute des parenthèses, les opérateurs sont pareils:

<?php
$h = true and false; // $h se vera assigner à true
echo "1) ", $h, "\n";
$h = (true and false);
echo "2) ", $h, "\n";
?>


On écrit verra d'ailleurs!


dorian53
WRInaute passionné
WRInaute passionné
 
Messages: 2199
Inscription: 10 Avr 2005

Message le Jeu Nov 22, 2007 19:10

FloBaoti a écrit:
Jeviensderio a écrit:and exécute le second test si le premier est vrai, et && exécute les deux dans tous les cas

Selon la doc, ces 2 opérateurs sont identiques et ils n'exécutent la seconde condition que si la première est vraie...
Ca correspond à un "ET ALORS" dans certains langages...



Merci pour vos réponses, c'est vraiment ce point qui m'intéressait.

Ce serait donc visiblement des "testes courts", mais je n'ai pas trouvé cette information dans la doc.


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 911
Inscription: 5 Aoû 2003

Message le Ven Nov 23, 2007 14:35

Jeviensderio a écrit:
// "&&" a une précédence supérieure à "and"
$g = true && false; // $g se vera assigner à (true && false), ce qui est false
$h = true and false; // $h se vera assigner à true



je dirais plutot que 'and' à une précédence inférieur à '=' et par là même que '&&' est plus fort que '='

'&&' > '=' > 'and'


Jeviensderio
WRInaute passionné
WRInaute passionné
 
Messages: 1340
Inscription: 29 Sep 2006

Message le Ven Nov 23, 2007 15:07

C'était une citation du manuel PHP (dont le lien est donné plus haut).


dorian53
WRInaute passionné
WRInaute passionné
 
Messages: 2199
Inscription: 10 Avr 2005

Message le Ven Nov 23, 2007 15:09

Justement je ne vois pas ce qui indique que les tests s'arretent à la première condition fausse.


Jeviensderio
WRInaute passionné
WRInaute passionné
 
Messages: 1340
Inscription: 29 Sep 2006

Message le Ven Nov 23, 2007 18:38

julienr a écrit:
je dirais plutot que 'and' à une précédence inférieur à '=' et par là même que '&&' est plus fort que '='

'&&' > '=' > 'and'


Oui.


erestrebian
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 460
Inscription: 15 Juin 2007

Message le Ven Nov 23, 2007 19:50

Jeviensderio a écrit:and exécute le second test si le premier est vrai, et && exécute les deux dans tous les cas


Il me semble justement que si la première partie est fausse && ne cherche même pas à savoir si la seconde partie est vraie...

style
$b=1;
if ((isset($a))&&($a=$b)) $a ne prendra pas la valeur de $b s'il n'existe pas auparavant

Alors que and execute les deux tests. (peut-être simplement une rédaction trop rapide :D )

Pour choisir entre or et ||, il s'agit de la même chose or testera les deux itérations alors que || ne testera la seconde que si la première est fausse.


Jeviensderio
WRInaute passionné
WRInaute passionné
 
Messages: 1340
Inscription: 29 Sep 2006

Message le Sam Nov 24, 2007 12:38

Le petit programme que j'ai inséré donne la réponse exacte.
Je le mets encore:

<?php
$h = true and false; // $h se vera assigner à true
echo "1) ", $h, "\n";
$h = (true and false);
echo "2) ", $h, "\n";
?>


On voit que les deux conditions sont testées à la fois.


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 911
Inscription: 5 Aoû 2003

Message le Sam Nov 24, 2007 12:58

sauf que je si je comprend bien le question initiale la test est plutôt :
Code: Tout sélectionner
<?php
$h = (true and false); // $h se vera assigner à true
echo "1) ", $h, "\n";
$h = (true && false);
echo "2) ", $h, "\n";
?>

qii doit donner false dans les deux cas


dorian53
WRInaute passionné
WRInaute passionné
 
Messages: 2199
Inscription: 10 Avr 2005

Message le Sam Nov 24, 2007 14:43

J'en suis perdu avec tous vos exemples.

La question est simple et s'illustre simplement avec l'exemple de mon 1er post.

[PHP] Opérateurs logiques

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité