Page 1 sur 1

XOR

Posté : 24 oct. 2012, 20:39
par schim59
Bonjour,
<?php

$a=true;
var_dump($a); 
$b=true;
var_dump($b);
$c=$a xor $b;
var_dump($c);
var_dump($a xor $b);
?> 
boolean true

boolean true

boolean true

boolean false
Pourquoi la valeur de $a xor $b change en étant affectée a $c ?

D'avance merci.

Image

Re: XOR

Posté : 24 oct. 2012, 21:04
par Ryle
C'est une question de précédence des opérateurs... ou de priorité si tu préfères.

Comme en mathématique, la multiplication et la division sont prioritaire par rapport à l'addition et la soustraction, ainsi : " 2 + 1 x 3 " équivaut ) " 2 + (1 x 3) ", soit 5 et non pas à " (2 + 1) x 3 ", soit 5.

En php, c'est le même principe, et en l'occurrence, l'opérateur d'affectation (=) est prioritaire sur l'opérateur xor. PHP exécute donc le code ($c=$a) xor $b et non pas $c=($a xor $b)

Pour plus d'informations sur les précédences en php : http://php.net/manual/fr/language.opera ... edence.php


Nota : c'est également pour cela qu'en php, il est fortement recommandé d'utiliser les opérateurs de comparaison || et && plutôt que OR et AND, à moins de savoir pourquoi on les utilises, puisque la priorité n'est pas la même.

Ps : j'adore le sheriff de l'espace ;)

Re: XOR

Posté : 24 oct. 2012, 21:08
par schim59
Merci

Re: XOR

Posté : 24 oct. 2012, 21:13
par sirakawa
Il faut TOUJOURS parenthéser les expressions booléennes; ça réduit les occasions de surprise; les électroniciens ne le font pas, mais à tort à mon avis
((a et b) ou (a et c)) est plus clair que leur foutu: ab ou ac.
Bonjour,
<?php

$a=true;
var_dump($a); 
$b=true;
var_dump($b);
//modif
$c=($a xor $b(;
var_dump($c);
//par prudence
var_dump(($a xor $b));
?> 
boolean true

boolean true

boolean true

boolean false
Pourquoi la valeur de $a xor $b change en étant affectée a $c ?

D'avance merci.

Image