search for in the

Last updated: Fri, 23 Jan 2009

Les opérateurs logiques

Les opérateurs logiques
Exemple Nom Résultat
\$a and \$b ET (And) TRUE si \$a ET \$b valent TRUE.
\$a or \$b OU (Or) TRUE si \$a OU \$b valent TRUE.
\$a xor \$b XOR (Xor) TRUE si \$a OU \$b est TRUE, mais pas les deux en même temps.
! \$a NON (Not) TRUE si \$a n'est pas TRUE.
\$a && \$b ET (And) TRUE si \$a ET \$b sont TRUE.
\$a || \$b OU (Or) TRUE si \$a OU \$b est TRUE.

La raison pour laquelle il existe deux types de "ET" et de "OU" est qu'ils ont des priorités différentes. Voir le paragraphe précédence d'opérateurs.

Exemple #1 Illustration des opérateurs logiques

``` <?php// foo() ne sera jamais appeler car ces opérateurs s'annulent\$a = (false && foo());\$b = (true  || foo());\$c = (false and foo());\$d = (true  or  foo());// "||" a un précédence supérieure que "or"\$e = false || true; // \$e se vera assigner à (false || true), ce qui est true\$f = false or true; // \$f se vera assigner à falsevar_dump(\$e, \$f);// "&&" 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 à truevar_dump(\$g, \$h);?> ```

L'exemple ci-dessus va afficher quelque chose de similaire à :

```bool(true)
bool(false)
bool(false)
bool(true)
```

User Contributed Notes
Les opérateurs logiques
sandaimespaceman at gmail dot com
11-Sep-2008 08:07
``` There's one userful way to use the or operator: <?php //If the connection was success, "Connected to database" will be shown. //If the connection was failed, "Unable to connect" will be shown.(NOTE: The @ will hide error messages) @mysql_connect("localhost", "root", "password") or die("Unable to connect"); echo "Connected to database"; ?> So you don't need to use if operators to add more lines. ```
jeffjeffleelee at hotmail dot com
06-Jul-2008 09:30
``` @zhustar: I will verify the following: <?php \$a = false xor true; var_dump(\$a);  // bool(false) \$a = (false xor true); var_dump(\$a);  // bool(true) ?> At first I thought this was some egregious bug, and then I realized that this is merely an issue of operator precedence. English-word boolean operators have relatively low precedence--in fact they take place after assignment. So the first example assigns false to \$a, and then does an xor operation on \$a and boolean true. ```
12-Jun-2008 10:40
``` Someone ever noted that C type operators are applicable in php as well? more like a (bool / boolean) cast... See: <?php ini_set('display_errors', 1); ini_set('error_reporting', 8191);// php5 \$whatever = NULL; \$Iwaslike = 'WTF!'; if(!!(\$whatever)){     echo '\$whatever'.PHP_EOL; } if(!!(\$Iwaslike)){     echo '\$Iwaslike'.PHP_EOL; } if(!!!(\$whatever)){     echo '\$whatever'.PHP_EOL; } if(!!!(\$Iwaslike)){     echo '\$Iwaslike'.PHP_EOL; } ?> ```
momrom at freenet dot de
12-Jun-2008 07:10
``` Some examples from the english manual that aren't avaiable in all languages: Like in C, logical expressions are evaluated from left to right until the result is known. foo() will never get called in the following cases. <?php \$a = (false && foo()); \$b = (true  || foo()); \$c = (false and foo()); \$d = (true  or  foo()); ?> "||" has a greater precedence than "=" which has a greater one than "or" <?php // same as (\$e = (false || true)), // expression is true and \$e ist assigned to true \$e = false || true; // same as ((\$e = false) or true), // expression is true but \$e is assigned to false \$f = false or true; ?> "&&" has a greater precedence than "=" which has a greater one than "and" <?php // same as (\$e = (true || false)), // expression is false and \$e ist assigned to false \$g = true && false; // same as ((\$e = true) and false), // expression is false but \$e is assigned to true \$h = true and false; ?> ```
Benjamin
29-Feb-2008 09:48
``` Re:Richard I show \$b printing 1 rather than "banana". Here's how I understand what's going on. <?php //"||" has a greater precedence than "or" \$a=0 or \$a="avocado"; //evaluated as (\$a=0) or (\$a="avacado") //Since \$a=0 is false, \$a="avocado" is evaluated and \$a is assigned the string value "avocado". echo "\$a"; //prints "avocado" var_dump (\$a); // string(7) "avocado" \$b=0 || \$b="banana"; // evaluated as \$b = (0 || \$b = "banana") echo \$b; //prints "1" var_dump (\$b); // bool(true) ?> ```
Richard
30-Jan-2008 06:22
``` Re Lawrence: You sort of can do conditional evaluation: \$a=0 or \$a="avocado"; echo "\$a";                              #Prints "avocado" But oddly: \$b=0 || \$b="banana"; echo \$b;                                 #Prints "banana" ```
zhustar at gmail dot com
17-Jan-2008 07:02
``` \$a = false xor true; var_dump(\$a);  // bool(false) \$a = (false xor true); var_dump(\$a);  // bool(true) ```
pepesantillan at gmail dot com
23-Dec-2007 03:23
``` worth reading for people learning about php and programming: (adding extras <?php ?> to get highlighted code) about the following example in this page manual: Example#1 Logical operators illustrated ... <?php // "||" has a greater precedence than "or" \$e = false || true; // \$e will be assigned to (false || true) which is true \$f = false or true; // \$f will be assigned to false var_dump(\$e, \$f); // "&&" has a greater precedence than "and" \$g = true && false; // \$g will be assigned to (true && false) which is false \$h = true and false; // \$h will be assigned to true var_dump(\$g, \$h); ?> _______________________________________________end of my quote... If necessary, I wanted to give further explanation on this and say that when we write: \$f = false or true; // \$f will be assigned to false the explanation: "||" has a greater precedence than "or" its true. But a more acurate one would be "||" has greater precedence than "or" and than "=", whereas "or" doesnt have greater precedence than "=", so <?php \$f = false or true; //is like writting (\$f = false ) or true; //and \$e = false || true; is the same as \$e = (false || true); ?> same goes for "&&" and "AND". If you find it hard to remember operators precedence you can always use parenthesys - "(" and ")". And even if you get to learn it remember that being a good programmer is not showing you can do code with fewer words. The point of being a good programmer is writting code that is easy to understand (comment your code when necessary!), easy to maintain and with high efficiency, among other things. ```
paranoiq at centrum dot cz
19-Nov-2007 08:00
``` and, or and xor can be used as conditional constructs: <?php // do_that() is executed only if do_this() returns false if(\$something) do_this() or do_that(); // \$b is assigned to \$b, do_that() is executed if \$b is false if(\$something) \$a = \$b or do_that(); // do_that() is executed only if do_this() returns true if(\$something) do_this() and do_that(); // \$b is assigned to \$b, do_that() is executed if \$b is true if(\$something) \$a = \$b and do_that(); // both do_that() and do_this() are executed.. if(\$something) do_this() xor do_that(); // .. so the behaviour is same as: if(\$something) {     do_this();     do_that(); } ?> for understanding what happens if \$b is NULL or do_this() returns NULL, read the avbentem's comment on NULL type. generaly speaking, NULL is threated like false in most cases. ```
peter dot kutak at NOSPAM dot gmail dot com
01-Oct-2007 12:36
``` \$test = true and false;     ---> \$test === true \$test = (true and false);  ---> \$test === false \$test = true && false;      ---> \$test === false ```
Lawrence
28-Aug-2007 12:04
``` Note that PHP's boolean operators *always* return a boolean value... as opposed to other languages that return the value of the last evaluated expression. For example: \$a = 0 || 'avacado'; print "A: \$a\n"; will print: A: 1 in PHP -- as opposed to printing "A: avacado" as it would in a language like Perl or JavaScript. This means you can't use the '||' operator to set a default value: \$a = \$fruit || 'apple'; instead, you have to use the '?:' operator: \$a = (\$fruit ? \$fruit : 'apple'); ```
Andrew
13-Aug-2007 08:49
``` > <?php > your_function() or return "whatever"; > ?> doesn't work because return is not an expression, it's a statement. if return was a function it'd work fine. :/ ```
looris at gmail dot com
17-Jun-2007 07:46
``` Please note that while you can do things like: <?php your_function() or die("horribly"); ?> you can't do: <?php your_function() or return "whatever"; ?> (it will give you a syntax error). ```
eduardofleury at uol dot com dot br
14-Jun-2007 06:16
``` ;;;;;;;;;;;;;;;;;;;;;;;;; ; P1 P2; And; OR  ; XOR ; ;;;;;;;;;;;;;;;;;;;;;;;;; ; V  V ; V  ; V   ; F   ; ; V  F ; F  ; V   ; V   ; ; F  V ; F  ; V   ; V   ; ; F  F ; F  ; F   ; F   ; ;;;;;;;;;;;;;;;;;;;;;;;;; <?php \$a = 2; \$b = 3; \$c = 6; print !(\$a > \$b && \$b < \$c);// true print ((\$a > \$b) and (\$b < \$c));// false print (\$a == \$b or \$b < \$c); // true print \$a == \$b || \$b < \$c; // true \$x = \$a < \$b; //\$x = true \$y = \$b === \$c; //\$y = false print  \$x xor \$y; // true ?> ```