3v4l.org

run code in 300+ PHP versions simultaneously
<?php declare(strict_types = 1); /** * @template T of Enum */ class EnumSet { private $type; /** * @param class-string<T> $type */ public function __construct(string $type) { $this->type = $type; } /** @return T */ public function first() : Enum { return new $this->type(); } } abstract class Enum { /** * @return EnumSet<static> */ public static function all() : EnumSet { return new EnumSet(static::class); } } /** * @extends EnumSet<CustomEnum> */ final class CustomEnumSet extends EnumSet { public function __construct() { parent::__construct(CustomEnum::class); } } class CustomEnum extends Enum { public static function all() : CustomEnumSet { return new CustomEnumSet(); } } class MyCustomEnum extends CustomEnum { public function foo() : void {} } MyCustomEnum::all()->first()->foo();
Output for 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.4, 8.3.6 - 8.3.7
Fatal error: Uncaught Error: Call to undefined method CustomEnum::foo() in /in/E78KQ:59 Stack trace: #0 {main} thrown in /in/E78KQ on line 59
Process exited with code 255.
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 Fatal error: Uncaught Error: Call to undefined method CustomEnum::foo() in /in/E78KQ:59 Stack trace: #0 {main} thrown in /in/E78KQ on line 59
Process exited with code 255.
Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33
Fatal error: Declaration of CustomEnum::all(): CustomEnumSet must be compatible with Enum::all(): EnumSet in /in/E78KQ on line 52
Process exited with code 255.

preferences:
145.41 ms | 402 KiB | 182 Q