<?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";
}
preferences:
26.28 ms | 406 KiB | 5 Q