$a > $b
is true and $b > $c
is true, does that mean that $a > $c
also true? # precondition: if ($a === $b) { throw new Exception( 'both are strictly equal, can not compare strictly for greater or smaller' ); } ($a > $b) !== ($b > $a)
==
operator is not reflexive in PHP, i.e. $a == $a
not always true: var_dump(NAN == NAN); // bool(false)
Note: The fact that comparing with NAN is always false is not a feature of PHP. This behavior is defined in the IEEE 754 standard format for representing floating-point numbers ( explained on stackoverflow ); ==
symmetric , that is, $a == $b
and $b == $a
always equal;==
not transitive , that is, $a == $b
and $b == $c
does not mean that $a == $c
: var_dump(true == "a"); // bool(true) var_dump("a" == 0); // bool(true) var_dump(true == 0); // bool(false)
<=
/ >=
should be non-reflexive, antisymmetric and transitive:<=
operator in PHP is not reflexive , that is, the expression $a <= $a
not always true (see the example for ==
);<=
not antisymmetric , that is, the truth of the expressions $a <= $b
and $b <= $a
does not mean that $a == $b
: var_dump(NAN <= "foo"); // bool(true) var_dump("foo" <= NAN); // bool(true) var_dump(NAN == "foo"); // bool(false)
<=
not transitive , that is, the truth of the expressions $a <= $b
and $b <= $c
does not mean that $a <= $c
(the example is the same as for the ==
operator).<=
operator <=
not complete , that is, both $a <= $b
and $b <= $a
can be false: var_dump(new stdClass <= new DateTime); // bool(false) var_dump(new DateTime <= new stdClass); // bool(false)
<
/ >
should be anti-reflective, asymmetric and transitive:<
operator in PHP is anti-reflective , that is, $a < $a
always false. This is relevant since PHP 5.4. In previous versions, INF < INF
is true;<
not asymmetric , that is, the truth of the expression $a < $b
does not mean that !($b < $a)
is true (see the example for <=
);<
not transitive , that is, it does not follow from the truth of $a < $b
and $b < $c
that $a < $c
also true: var_dump(-INF < 0); // bool(true) var_dump(0 < TRUE); // bool(true) var_dump(-INF < TRUE); // bool(false)
<
not trichotomous , that is, the expressions $a < $b
, $b < $a
and $a == $b
can be false (the example is the same as for <=
);<
can be looped around , i.e. there are cases when $a < $b
, $b < $c
and $c < $a
are true: var_dump(INF < []); // bool(true) var_dump([] < new stdClass); // bool(true) var_dump(new stdClass < INF); // bool(true)
Note: This example generates a warning of the "level of stdClass could not be converted to double" level notice. ($a > $b) == ($b < $a) ($a >= $b) == ($b <= $a)
if ( gettype($a)===gettype($b) ) ...
variable types if ( gettype($a)===gettype($b) ) ...
if ( (string)$a===(string)$b ) ...
if ( ($a.'')===($b.'') ) ...
types $a VS. $b $a>$b $a<$b $a<=$b $a>=$b $a==$b $a===$b float(NAN) float(-INF) false false false false false false float(NAN) float(0) false false false false false false float(NAN) float(1) false false false false false false float(NAN) float(INF) false false false false false false float(NAN) float(NAN) false false false false false false float(NAN) int(-1) false false false false false false float(NAN) int(0) false false false false false false float(NAN) int(1) false false false false false false
Translator's note: The answer above says that any comparison with NAN returns false, so there is nothing unusual here. $a VS. $b $a>$b $a<$b $a<=$b $a>=$b $a==$b $a===$b NULL(NULL) array() false false true true true false NULL(NULL) bool(false) false false true true true false NULL(NULL) float(0) false false true true true false NULL(NULL) int(0) false false true true true false NULL(NULL) str('') false false true true true false array() bool(false) false false true true true false bool(false) float(0) false false true true true false bool(false) int(0) false false true true true false str('') bool(false) false false true true true false bool(false) str('0') false false true true true false float(-INF) bool(true) false false true true true false bool(true) float(1) false false true true true false float(INF) bool(true) false false true true true false float(NAN) bool(true) false false true true true false bool(true) int(-1) false false true true true false bool(true) int(1) false false true true true false bool(true) str("\0") false false true true true false bool(true) str('+') false false true true true false bool(true) str('-') false false true true true false bool(true) str('01') false false true true true false bool(true) str('1') false false true true true false bool(true) str('false') false false true true true false str('text') bool(true) false false true true true false str('true') bool(true) false false true true true false int(0) float(0) false false true true true false str("\0") float(0) false false true true true false str('') float(0) false false true true true false str('+') float(0) false false true true true false str('-') float(0) false false true true true false str('0') float(0) false false true true true false str('false') float(0) false false true true true false str('text') float(0) false false true true true false str('true') float(0) false false true true true false int(1) float(1) false false true true true false float(1) str('01') false false true true true false float(1) str('1') false false true true true false str("\0") int(0) false false true true true false str('') int(0) false false true true true false str('+') int(0) false false true true true false str('-') int(0) false false true true true false int(0) str('0') false false true true true false str('false') int(0) false false true true true false str('text') int(0) false false true true true false str('true') int(0) false false true true true false int(1) str('01') false false true true true false int(1) str('1') false false true true true false str('1') str('01') false false true true true false
$a VS. $b $a>$b $a<$b $a<=$b $a>=$b $a==$b $a===$b float(NAN) str("\0") true true true true false false float(NAN) str('') true true true true false false float(NAN) str('+') true true true true false false float(NAN) str('-') true true true true false false float(NAN) str('0') true true true true false false float(NAN) str('01') true true true true false false float(NAN) str('1') true true true true false false float(NAN) str('false') true true true true false false float(NAN) str('text') true true true true false false float(NAN) str('true') true true true true false false
$a VS. $b $a>$b $a<$b $a<=$b $a>=$b $a==$b $a===$b NULL(NULL) NULL(NULL) false false true true true true float(-INF) float(-INF) false false true true true true float(INF) float(INF) false false true true true true
$a VS. $b $a>$b $a<$b $a<=$b $a>=$b $a==$b $a===$b NULL(NULL) bool(true) false true true false false false float(-INF) NULL(NULL) true false false true false false NULL(NULL) float(1) false true true false false false float(INF) NULL(NULL) true false false true false false float(NAN) NULL(NULL) true false false true false false NULL(NULL) int(-1) false true true false false false NULL(NULL) int(1) false true true false false false NULL(NULL) str("\0") false true true false false false NULL(NULL) str('+') false true true false false false NULL(NULL) str('-') false true true false false false NULL(NULL) str('0') false true true false false false NULL(NULL) str('01') false true true false false false NULL(NULL) str('1') false true true false false false NULL(NULL) str('false') false true true false false false NULL(NULL) str('text') false true true false false false NULL(NULL) str('true') false true true false false false array() bool(true) false true true false false false float(-INF) array() false true true false false false array() float(0) true false false true false false array() float(1) true false false true false false float(INF) array() false true true false false false float(NAN) array() false true true false false false array() int(-1) true false false true false false array() int(0) true false false true false false array() int(1) true false false true false false array() str("\0") true false false true false false str('') array() false true true false false false array() str('+') true false false true false false array() str('-') true false false true false false array() str('0') true false false true false false array() str('01') true false false true false false array() str('1') true false false true false false array() str('false') true false false true false false array() str('text') true false false true false false array() str('true') true false false true false false bool(true) bool(false) true false false true false false float(-INF) bool(false) true false false true false false float(1) bool(false) true false false true false false float(INF) bool(false) true false false true false false float(NAN) bool(false) true false false true false false bool(false) int(-1) false true true false false false int(1) bool(false) true false false true false false bool(false) str("\0") false true true false false false bool(false) str('+') false true true false false false bool(false) str('-') false true true false false false bool(false) str('01') false true true false false false str('1') bool(false) true false false true false false bool(false) str('false') false true true false false false str('text') bool(false) true false false true false false str('true') bool(false) true false false true false false bool(true) float(0) true false false true false false bool(true) int(0) true false false true false false str('') bool(true) false true true false false false bool(true) str('0') true false false true false false float(-INF) float(0) false true true false false false float(-INF) float(1) false true true false false false float(INF) float(-INF) true false false true false false float(-INF) int(-1) false true true false false false float(-INF) int(0) false true true false false false float(-INF) int(1) false true true false false false float(-INF) str("\0") false true true false false false float(-INF) str('') false true true false false false float(-INF) str('+') false true true false false false float(-INF) str('-') false true true false false false float(-INF) str('0') false true true false false false float(-INF) str('01') false true true false false false float(-INF) str('1') false true true false false false float(-INF) str('false') false true true false false false float(-INF) str('text') false true true false false false float(-INF) str('true') false true true false false false float(1) float(0) true false false true false false float(INF) float(0) true false false true false false float(0) int(-1) true false false true false false int(1) float(0) true false false true false false float(0) str('01') false true true false false false str('1') float(0) true false false true false false float(INF) float(1) true false false true false false float(1) int(-1) true false false true false false float(1) int(0) true false false true false false float(1) str("\0") true false false true false false str('') float(1) false true true false false false float(1) str('+') true false false true false false float(1) str('-') true false false true false false float(1) str('0') true false false true false false float(1) str('false') true false false true false false str('text') float(1) false true true false false false str('true') float(1) false true true false false false float(INF) int(-1) true false false true false false float(INF) int(0) true false false true false false float(INF) int(1) true false false true false false float(INF) str("\0") true false false true false false float(INF) str('') true false false true false false float(INF) str('+') true false false true false false float(INF) str('-') true false false true false false float(INF) str('0') true false false true false false float(INF) str('01') true false false true false false float(INF) str('1') true false false true false false float(INF) str('false') true false false true false false float(INF) str('text') true false false true false false float(INF) str('true') true false false true false false int(0) int(-1) true false false true false false int(1) int(-1) true false false true false false str("\0") int(-1) true false false true false false str('') int(-1) true false false true false false str('+') int(-1) true false false true false false str('-') int(-1) true false false true false false str('0') int(-1) true false false true false false int(-1) str('01') false true true false false false str('1') int(-1) true false false true false false str('false') int(-1) true false false true false false str('text') int(-1) true false false true false false str('true') int(-1) true false false true false false int(1) int(0) true false false true false false int(0) str('01') false true true false false false str('1') int(0) true false false true false false int(1) str("\0") true false false true false false str('') int(1) false true true false false false int(1) str('+') true false false true false false int(1) str('-') true false false true false false int(1) str('0') true false false true false false int(1) str('false') true false false true false false str('text') int(1) false true true false false false str('true') int(1) false true true false false false str('') str("\0") false true true false false false str('+') str("\0") true false false true false false str('-') str("\0") true false false true false false str("\0") str('0') false true true false false false str("\0") str('01') false true true false false false str('1') str("\0") true false false true false false str('false') str("\0") true false false true false false str('text') str("\0") true false false true false false str('true') str("\0") true false false true false false str('') str('+') false true true false false false str('') str('-') false true true false false false str('') str('0') false true true false false false str('') str('01') false true true false false false str('') str('1') false true true false false false str('') str('false') false true true false false false str('') str('text') false true true false false false str('') str('true') false true true false false false str('-') str('+') true false false true false false str('+') str('0') false true true false false false str('+') str('01') false true true false false false str('1') str('+') true false false true false false str('false') str('+') true false false true false false str('text') str('+') true false false true false false str('true') str('+') true false false true false false str('-') str('0') false true true false false false str('-') str('01') false true true false false false str('1') str('-') true false false true false false str('false') str('-') true false false true false false str('text') str('-') true false false true false false str('true') str('-') true false false true false false str('0') str('01') false true true false false false str('1') str('0') true false false true false false str('false') str('0') true false false true false false str('text') str('0') true false false true false false str('true') str('0') true false false true false false str('false') str('01') true false false true false false str('text') str('01') true false false true false false str('true') str('01') true false false true false false str('1') str('false') false true true false false false str('text') str('1') true false false true false false str('true') str('1') true false false true false false str('text') str('false') true false false true false false str('true') str('false') true false false true false false str('true') str('text') true false false true false false
A<C : float(NAN) > str('a') > str('') A<C : float(NAN) > str('a') > str('1') A<C : float(NAN) > str('a') > str('A') A<C : float(NAN) > str('a') > str('0') A<C : float(NAN) > str('1') > str('') A<C : float(NAN) > str('1') > str('0') A<C : float(NAN) > str('A') > str('') A<C : float(NAN) > str('A') > str('1') A<C : float(NAN) > str('A') > str('0') A<C : float(NAN) > str('0') > str('') A==C : str('') > float(NAN) > NULL(NULL) A===C : str('') > float(NAN) > str('') A<C : str('') > float(NAN) > str('a') A<C : str('') > float(NAN) > str('1') A==C : str('') > float(NAN) > bool(false) A<C : str('') > float(NAN) > str('A') A<C : str('') > float(NAN) > str('0') A==C : str('') > float(-INF) > NULL(NULL) A==C : str('') > float(-INF) > bool(false) A==C : str('') > int(-1) > NULL(NULL) A==C : str('') > int(-1) > bool(false) A==C : str('') > float(-1) > NULL(NULL) A==C : str('') > float(-1) > bool(false) A==C : array() > float(NAN) > NULL(NULL) A==C : array() > float(NAN) > bool(false) A==C : array() > float(INF) > NULL(NULL) A==C : array() > float(INF) > bool(false) A==C : array() > float(-INF) > NULL(NULL) A==C : array() > float(-INF) > bool(false) A==C : array() > str('a') > NULL(NULL) A==C : array() > str('a') > bool(false) A==C : array() > int(1) > NULL(NULL) A==C : array() > int(1) > bool(false) A==C : array() > float(1) > NULL(NULL) A==C : array() > float(1) > bool(false) A==C : array() > str('1') > NULL(NULL) A==C : array() > str('1') > bool(false) A==C : array() > str('A') > NULL(NULL) A==C : array() > str('A') > bool(false) A==C : array() > str('0') > NULL(NULL) A==C : array() > int(-1) > NULL(NULL) A==C : array() > int(-1) > bool(false) A==C : array() > float(-1) > NULL(NULL) A==C : array() > float(-1) > bool(false) A===C : str('a') > float(NAN) > str('a') A<C : str('a') > str('') > float(NAN) A<C : str('a') > str('1') > float(NAN) A==C : str('a') > str('1') > int(0) A==C : str('a') > str('1') > float(0) A<C : str('a') > str('A') > float(NAN) A<C : str('a') > str('0') > float(NAN) A==C : bool(true) > str('') > float(NAN) A==C : bool(true) > str('') > float(-INF) A==C : bool(true) > str('') > int(-1) A==C : bool(true) > str('') > float(-1) A==C : bool(true) > array() > float(NAN) A==C : bool(true) > array() > float(INF) A==C : bool(true) > array() > float(-INF) A==C : bool(true) > array() > str('a') A==C : bool(true) > array() > int(1) A==C : bool(true) > array() > float(1) A==C : bool(true) > array() > str('1') A==C : bool(true) > array() > str('A') A==C : bool(true) > array() > int(-1) A==C : bool(true) > array() > float(-1) A==C : bool(true) > int(0) > float(-INF) A==C : bool(true) > int(0) > int(-1) A==C : bool(true) > int(0) > float(-1) A==C : bool(true) > str('0') > float(NAN) A==C : bool(true) > str('0') > float(-INF) A==C : bool(true) > str('0') > int(-1) A==C : bool(true) > str('0') > float(-1) A==C : bool(true) > float(0) > float(-INF) A==C : bool(true) > float(0) > int(-1) A==C : bool(true) > float(0) > float(-1) A==C : int(1) > str('a') > str('1') A==C : int(1) > str('A') > str('1') A==C : float(1) > str('a') > str('1') A==C : float(1) > str('A') > str('1') A<C : str('1') > float(NAN) > str('a') A===C : str('1') > float(NAN) > str('1') A<C : str('1') > float(NAN) > str('A') A<C : str('1') > str('') > float(NAN) A<C : str('1') > str('0') > float(NAN) A<C : str('A') > float(NAN) > str('a') A===C : str('A') > float(NAN) > str('A') A<C : str('A') > str('') > float(NAN) A<C : str('A') > str('1') > float(NAN) A==C : str('A') > str('1') > int(0) A==C : str('A') > str('1') > float(0) A<C : str('A') > str('0') > float(NAN) A==C : int(0) > float(-INF) > NULL(NULL) A==C : int(0) > float(-INF) > bool(false) A==C : int(0) > int(-1) > NULL(NULL) A==C : int(0) > int(-1) > bool(false) A==C : int(0) > float(-1) > NULL(NULL) A==C : int(0) > float(-1) > bool(false) A<C : str('0') > float(NAN) > str('a') A<C : str('0') > float(NAN) > str('1') A==C : str('0') > float(NAN) > bool(false) A<C : str('0') > float(NAN) > str('A') A===C : str('0') > float(NAN) > str('0') A==C : str('0') > float(-INF) > bool(false) A<C : str('0') > str('') > float(NAN) A==C : str('0') > int(-1) > bool(false) A==C : str('0') > float(-1) > bool(false) A==C : float(0) > float(-INF) > NULL(NULL) A==C : float(0) > float(-INF) > bool(false) A==C : float(0) > int(-1) > NULL(NULL) A==C : float(0) > int(-1) > bool(false) A==C : float(0) > float(-1) > NULL(NULL) A==C : float(0) > float(-1) > bool(false)
'Queen' > 'King' > 'Jack' > 'Ace'
isset()
and is_null()
==
and ===
Source: https://habr.com/ru/post/176117/
All Articles