PHP-Difference Between Comparison Operators

Difference Between Comparison Operators - 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)

Tags:

Add a Comment