<?php
error_reporting(0);
if (PHP_VERSION_ID >= 80100) {
eval(<<<PHP
enum A: string
{
case A = 'A';
case B = 'B';
}
enum B: string
{
case A = 'A';
case B = 'B';
}
PHP);
}
class Str
{
public function __toString(): string
{
return 'A';
}
}
function vd(string $expr, bool $onlyTrue = false): void
{
$val = eval('return ' .$expr . ';');
if ($onlyTrue && $val !== true) {
return;
}
echo $expr . ': ';
var_dump($val);
}
$comparisons = [
'"A"',
'1',
'5',
'B::A',
'(object) []',
'[]',
'true',
'false',
'null',
'(new Str())',
];
if (PHP_VERSION_ID >= 80100) {
foreach ($comparisons as $comp) {
vd("A::A == {$comp}");
vd("A::A != {$comp}");
vd("{$comp} == A::A");
vd("{$comp} != A::A");
vd("in_array(A::A, [{$comp}])");
vd("in_array({$comp}, [A::A])");
echo "\n";
}
} else {
$comparisons = array_diff($comparisons, ['B::A']);
}
foreach ($comparisons as $c1) {
foreach ($comparisons as $c2) {
if ($c1 === $c2) {
continue;
}
vd("{$c1} == {$c2}", true);
vd("in_array({$c1}, [{$c2}])", true);
}
echo "\n";
}
- Output for 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- A::A == "A": bool(false)
A::A != "A": bool(true)
"A" == A::A: bool(false)
"A" != A::A: bool(true)
in_array(A::A, ["A"]): bool(false)
in_array("A", [A::A]): bool(false)
A::A == 1: bool(false)
A::A != 1: bool(true)
1 == A::A: bool(false)
1 != A::A: bool(true)
in_array(A::A, [1]): bool(false)
in_array(1, [A::A]): bool(false)
A::A == 5: bool(false)
A::A != 5: bool(true)
5 == A::A: bool(false)
5 != A::A: bool(true)
in_array(A::A, [5]): bool(false)
in_array(5, [A::A]): bool(false)
A::A == B::A: bool(false)
A::A != B::A: bool(true)
B::A == A::A: bool(false)
B::A != A::A: bool(true)
in_array(A::A, [B::A]): bool(false)
in_array(B::A, [A::A]): bool(false)
A::A == (object) []: bool(false)
A::A != (object) []: bool(true)
(object) [] == A::A: bool(false)
(object) [] != A::A: bool(true)
in_array(A::A, [(object) []]): bool(false)
in_array((object) [], [A::A]): bool(false)
A::A == []: bool(false)
A::A != []: bool(true)
[] == A::A: bool(false)
[] != A::A: bool(true)
in_array(A::A, [[]]): bool(false)
in_array([], [A::A]): bool(false)
A::A == true: bool(true)
A::A != true: bool(false)
true == A::A: bool(true)
true != A::A: bool(false)
in_array(A::A, [true]): bool(false)
in_array(true, [A::A]): bool(false)
A::A == false: bool(false)
A::A != false: bool(true)
false == A::A: bool(false)
false != A::A: bool(true)
in_array(A::A, [false]): bool(false)
in_array(false, [A::A]): bool(false)
A::A == null: bool(false)
A::A != null: bool(true)
null == A::A: bool(false)
null != A::A: bool(true)
in_array(A::A, [null]): bool(false)
in_array(null, [A::A]): bool(false)
A::A == (new Str()): bool(false)
A::A != (new Str()): bool(true)
(new Str()) == A::A: bool(false)
(new Str()) != A::A: bool(true)
in_array(A::A, [(new Str())]): bool(false)
in_array((new Str()), [A::A]): bool(false)
"A" == true: bool(true)
in_array("A", [true]): bool(true)
"A" == (new Str()): bool(true)
in_array("A", [(new Str())]): bool(true)
1 == (object) []: bool(true)
in_array(1, [(object) []]): bool(true)
1 == true: bool(true)
in_array(1, [true]): bool(true)
1 == (new Str()): bool(true)
in_array(1, [(new Str())]): bool(true)
5 == true: bool(true)
in_array(5, [true]): bool(true)
B::A == true: bool(true)
(object) [] == 1: bool(true)
in_array((object) [], [1]): bool(true)
(object) [] == true: bool(true)
in_array((object) [], [true]): bool(true)
[] == false: bool(true)
in_array([], [false]): bool(true)
[] == null: bool(true)
in_array([], [null]): bool(true)
true == "A": bool(true)
in_array(true, ["A"]): bool(true)
true == 1: bool(true)
in_array(true, [1]): bool(true)
true == 5: bool(true)
in_array(true, [5]): bool(true)
true == B::A: bool(true)
true == (object) []: bool(true)
in_array(true, [(object) []]): bool(true)
true == (new Str()): bool(true)
in_array(true, [(new Str())]): bool(true)
false == []: bool(true)
in_array(false, [[]]): bool(true)
false == null: bool(true)
in_array(false, [null]): bool(true)
null == []: bool(true)
in_array(null, [[]]): bool(true)
null == false: bool(true)
in_array(null, [false]): bool(true)
(new Str()) == "A": bool(true)
in_array((new Str()), ["A"]): bool(true)
(new Str()) == 1: bool(true)
in_array((new Str()), [1]): bool(true)
(new Str()) == true: bool(true)
in_array((new Str()), [true]): bool(true)
- Output for 7.4.33, 8.0.1 - 8.0.30
- "A" == true: bool(true)
in_array("A", [true]): bool(true)
"A" == (new Str()): bool(true)
in_array("A", [(new Str())]): bool(true)
1 == (object) []: bool(true)
in_array(1, [(object) []]): bool(true)
1 == true: bool(true)
in_array(1, [true]): bool(true)
1 == (new Str()): bool(true)
in_array(1, [(new Str())]): bool(true)
5 == true: bool(true)
in_array(5, [true]): bool(true)
(object) [] == 1: bool(true)
in_array((object) [], [1]): bool(true)
(object) [] == true: bool(true)
in_array((object) [], [true]): bool(true)
[] == false: bool(true)
in_array([], [false]): bool(true)
[] == null: bool(true)
in_array([], [null]): bool(true)
true == "A": bool(true)
in_array(true, ["A"]): bool(true)
true == 1: bool(true)
in_array(true, [1]): bool(true)
true == 5: bool(true)
in_array(true, [5]): bool(true)
true == (object) []: bool(true)
in_array(true, [(object) []]): bool(true)
true == (new Str()): bool(true)
in_array(true, [(new Str())]): bool(true)
false == []: bool(true)
in_array(false, [[]]): bool(true)
false == null: bool(true)
in_array(false, [null]): bool(true)
null == []: bool(true)
in_array(null, [[]]): bool(true)
null == false: bool(true)
in_array(null, [false]): bool(true)
(new Str()) == "A": bool(true)
in_array((new Str()), ["A"]): bool(true)
(new Str()) == 1: bool(true)
in_array((new Str()), [1]): bool(true)
(new Str()) == true: bool(true)
in_array((new Str()), [true]): bool(true)
preferences:
88.85 ms | 415 KiB | 5 Q