3v4l.org

run code in 300+ PHP versions simultaneously
<?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