@ 2025-01-03T03:58:16Z <?php
class Php8CompatUtils
{
private static ?object $logger = null;
public static function eq($a, $b): bool
{
// If both $a and $b are of type strings, compare them as strings
if (is_string($a) && is_string($b)) {
return $a == $b; // may not be === because php says '42' equals '042' true yet '42' === '042' is false.
}
// If both $a and $b are numeric strings, compare them as numbers
if (is_numeric($a) && is_numeric($b)) {
return $a == $b;
}
// If $a is an empty string and $b is 0, or vice versa, return true
if (($a === '' && $b === 0) || ($a === 0 && $b === '')) {
return true;
}
// If $a is a non-numeric string and $b is 0, or vice versa, return true
if ((is_string($a) && ($a !== '') && ($b === 0)) || (($a === 0) && is_string($b) && ($b !== ''))) {
return true;
}
// special case '123abc' == 123 .. php 7 casts 123abc to 123, then 123 == 123 results in true. lets mimic that.
if ((is_string($a) && ($a !== '') && (is_numeric($b)) && ((bool)$b))) {
$number = filter_var($a, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); //"-234.56xyz"
return $number == $b;
}
if (is_numeric($a) && ((bool)$a) && is_string($b) && ($b !== '')) {
$number = filter_var($b, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); //"-234.56xyz"
return $a == $number;
}
// If $a is a number and $b is a non-numeric string, cast $a to string and compare
if (is_numeric($a) && is_string($b)) {
return strval($a) == $b;
}
// If $b is a number and $a is a non-numeric string, cast $b to string and compare
if (is_string($a) && is_numeric($b)) {
return $a == strval($b);
}
if (is_array($a) || is_array($b)) {
return static::standardArrayCompare($a, $b);
}
// If $a and $b are both non-numeric strings, compare them directly, we should return true if they are the same
return $a == $b;
}
public static function gt($a, $b): bool
{
if (static::eq($a, $b)) {
return false;
}
return $a > $b;
}
public static function lt($a, $b): bool
{
if (static::eq($a, $b)) {
return false;
}
return $a < $b;
}
public static function gte($a, $b): bool
{
return static::eq($a, $b) || ($a > $b);
}
public static function lte($a, $b): bool
{
return static::eq($a, $b) || ($a < $b);
}
private static function standardArrayCompare($op1, $op2)
{
if (count($op1) < count($op2)) {
return -1; // $op1 < $op2
} elseif (count($op1) > count($op2)) {
return 1; // $op1 > $op2
}
foreach ($op1 as $key => $val) {
if (!array_key_exists($key, $op2)) {
return 1;
} elseif (static::lt($val, $op2[$key])) {
return -1;
} elseif (static::gt($val, $op2[$key])) {
return 1;
}
}
return 0; // $op1 == $op2
}
}
$a = [0 => ''];
$b = [0 => 0];
var_dump(Php8CompatUtils::eq($a, $b));
var_dump($a == $b);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 8.0.0 - 8.0.30 , 8.1.0 - 8.1.31 , 8.2.0 - 8.2.27 , 8.3.0 - 8.3.16 , 8.4.1 - 8.4.3 bool(false)
bool(false)
Output for 7.4.0 - 7.4.33 bool(false)
bool(true)
Output for 7.1.0 - 7.1.33 , 7.2.0 - 7.2.34 , 7.3.0 - 7.3.33 Parse error: syntax error, unexpected '?', expecting function (T_FUNCTION) or const (T_CONST) in /in/k0NTK on line 5
Process exited with code 255 . Output for 5.4.0 - 5.4.45 , 5.5.0 - 5.5.38 , 5.6.0 - 5.6.40 , 7.0.0 - 7.0.33 Parse error: syntax error, unexpected '?', expecting variable (T_VARIABLE) in /in/k0NTK on line 5
Process exited with code 255 . Output for 5.1.0 - 5.1.6 , 5.2.0 - 5.2.17 , 5.3.0 - 5.3.29 Parse error: syntax error, unexpected '?', expecting T_VARIABLE in /in/k0NTK on line 5
Process exited with code 255 . Output for 5.0.0 - 5.0.5 Parse error: parse error, unexpected '?', expecting T_VARIABLE in /in/k0NTK on line 5
Process exited with code 255 . Output for 4.4.2 - 4.4.9 Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/k0NTK on line 5
Process exited with code 255 . Output for 4.3.0 - 4.3.1 , 4.3.5 - 4.3.11 , 4.4.0 - 4.4.1 Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/k0NTK on line 5
Process exited with code 255 . Output for 4.3.2 - 4.3.4 Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/k0NTK on line 5
Process exited with code 255 . preferences:dark mode live preview
46.73 ms | 417 KiB | 5 Q