[PHP] Opérateurs logiques
16 messages
• Page 1 sur 2 • 1, 2
-

dorian53 - WRInaute passionné

- Messages: 2199
- Inscription: 10 Avr 2005
[PHP] Opérateurs logiques
Bonjour,
Existe t-il une différence entre and, &&, or et || sur la longueur du test dans la condition ?
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 ==
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.
-

Jeviensderio - WRInaute passionné

- Messages: 1340
- Inscription: 29 Sep 2006
and exécute le second test si le premier est vrai, et && exécute les deux dans tous les cas
-

narayana - WRInaute impliqué

- Messages: 835
- Inscription: 28 Jan 2005
Re: [PHP] Opérateurs logiques
dorian53 a écrit:ou
- Code: Tout sélectionner
if (isset($var) and $var = 'test')
- 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é

- Messages: 755
- Inscription: 30 Avr 2006
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é

- Messages: 1340
- Inscription: 29 Sep 2006
En fait cela dépend de la syntaxe:
Si on rajoute des parenthèses, les opérateurs sont pareils:
On écrit verra d'ailleurs!
// "&&" 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é

- Messages: 2199
- Inscription: 10 Avr 2005
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é

- Messages: 911
- Inscription: 5 Aoû 2003
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é

- Messages: 1340
- Inscription: 29 Sep 2006
C'était une citation du manuel PHP (dont le lien est donné plus haut).
-

Jeviensderio - WRInaute passionné

- Messages: 1340
- Inscription: 29 Sep 2006
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

- Messages: 460
- Inscription: 15 Juin 2007
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
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é

- Messages: 1340
- Inscription: 29 Sep 2006
Le petit programme que j'ai inséré donne la réponse exacte.
Je le mets encore:
On voit que les deux conditions sont testées à la fois.
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é

- Messages: 911
- Inscription: 5 Aoû 2003
sauf que je si je comprend bien le question initiale la test est plutôt :
qii doit donner false dans les deux cas
- 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
16 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- les opérateurs yahoo
- Opérateurs cachés Google
- Opérateurs Google et analyse du référencement
- Amende pour des opérateurs ...
- Opérateurs de Paiement // une solution correcte ?
- Test des divers opérateurs de micropaiement ?
- Opérateurs de recherche avancée sur MSN Search
- [Chat] Vote pour les nouveaux opérateurs
- Les opérateurs veulent faire payer Apple, Google, Facebook..
- Google Ads : les opérateurs européens veulent une part du gâteau
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

