3v4l.org

run code in 300+ PHP versions simultaneously
<?php trait Eq { public function equiv(Eq $lhs, Eq $rhs): bool { return $lhs->equiv($lhs, $rhs); } } class Tuple2 { use Eq; public function __construct(public Eq $key, public Eq $value) {} public function equiv(Eq $lhs, Eq $rhs): bool { return $lhs->key->equiv($lhs->key, $rhs->key) && $lhs->value->equiv($lhs->value, $rhs->value); } } class Tuple3 { use Eq; public function __construct(public Eq $key, public Eq $value, public Eq $column) {} public function equiv(Eq $lhs, Eq $rhs): bool { return $lhs->key->equiv($lhs->key, $rhs->key) && $lhs->value->equiv($lhs->value, $rhs->value) && $lhs->column->equiv($lhs->column, $rhs->column); } } function check_equiv(Eq $lhs, Eq $rhs) { return $lhs->equiv($lhs, $rhs); } class Number { use Eq; public function __construct(public int $value) {} public function equiv(int $lhs, int $rhs): bool { return $lhs === $rhs; } } var_dump(check_equiv( new Tuple3(new Tuple2(new Number(1), new Number(2)), new Tuple2(new Number(3), new Number(4)), new Tuple2(new Number(5), new Number(6))), new Tuple3(new Tuple2(new Number(1), new Number(2)), new Tuple2(new Number(3), new Number(4)), new Tuple2(new Number(5), new Number(6))) ));
Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
Fatal error: Uncaught TypeError: Tuple2::__construct(): Argument #1 ($key) must be of type Eq, Number given, called in /in/QKBbK on line 48 and defined in /in/QKBbK:13 Stack trace: #0 /in/QKBbK(48): Tuple2->__construct(Object(Number), Object(Number)) #1 {main} thrown in /in/QKBbK on line 13
Process exited with code 255.

preferences:
100.09 ms | 402 KiB | 89 Q