PHP-Difference Between Comparison Operators
This is a decent tip about PHO-Difference Between Comparison Operators (Logical operators), however, it’s missing a sensible example that demonstrates once a non-strict comparison will cause issues. If you employ strpos() to work out whether or not a substring exists inside a string (it returns FALSE if the substring isn’t found), the results may be misleading:
<?php $authors = 'Chris & Sean'; if (strpos($authors, 'Chris')) { echo 'Chris is an author.'; } else { echo 'Chris is not an author.'; } ?> |
Because the sub string Chris happens at the terribly starting of Chris & Sean, strpos() properly returns zero, indicating the first position among the string. as a result of the conditional statement treats this as a scientist, it evaluates to FALSE, and thus the condition fails. in numerous words, it’s like Chris is not AN author, but he is!
This can be corrected with a strict comparison:
<?php if (strpos($authors, 'Chris') !== FALSE) { echo 'Chris is an author.'; } else { echo 'Chris is not an author.'; } ?> |
Logical Operators
Example | Name | Result |
$a and $b | And | TRUE if both $a and $b are TRUE . |
$a or $b | Or | TRUE if either $a or $b is TRUE . |
$a xor $b | Xor | TRUE if either $a or $b is TRUE , but not both. |
! $a | Not | TRUE if $a is not TRUE . |
$a && $b | And | TRUE if both $a and $b are TRUE . |
$a || $b | Or | TRUE if either $a or $b is TRUE . |
Logical operators illustrated
<?php // -------------------- // foo() will never get called as those operators are short-circuit $a = (false && foo()); $b = (true || foo()); $c = (false and foo()); $d = (true or foo()); // -------------------- // "||" has a greater precedence than "or" // The result of the expression (false || true) is assigned to $e // Acts like: ($e = (false || true)) $e = false || true; // The constant false is assigned to $f before the "or" operation occurs // Acts like: (($f = false) or true) $f = false or true; var_dump($e, $f); // -------------------- // "&&" has a greater precedence than "and" // The result of the expression (true && false) is assigned to $g // Acts like: ($g = (true && false)) $g = true && false; // The constant true is assigned to $h before the "and" operation occurs // Acts like: (($h = true) and false) $h = true and false; var_dump($g, $h); ?> |
The above example will output something similar to:
bool(true)
bool(false)
bool(false)
bool(true)