3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Container { private array $factories = []; public function addFactory(string $className, Factory $factory): void { $this->factories[$className] = $factory; } public function getInstance(string $className): object { return $this->factories[$className]->create(); } } abstract class Factory { private Container $container; private array $config = []; public function __construct(Container $container, array $config = []) { $this->container = $container; $instanceConfig = array_key_exists(static::getClass(), $config) ? $config[static::getClass()] : []; $this->config = $instanceConfig; } abstract public static function getClass(): string; public function create(): object { $class = static::getClass(); $parameters = []; foreach($this->config['parameters'] as $name => $value) { if (null === $value) { $value = $this->container->getInstance($name); } $parameters[] = $value; } return new $class(...$parameters); } } class FooFactory extends Factory { public static function getClass(): string { return Foo::class; } } class BarFactory extends Factory { public static function getClass(): string { return Bar::class; } } class Foo { private Bar $bar; private string $test; public function __construct(Bar $bar, string $test) { $this->bar = $bar; $this->test = $test; } } class Bar {} $config = [ Foo::class => [ 'parameters' => [ Bar::class => null, 'test', ] ], Bar::class => [ 'parameters' => [], ], ]; $container = new Container; $container->addFactory(FooFactory::getClass(), new FooFactory($container, $config)); $container->addFactory(BarFactory::getClass(), new BarFactory($container, $config)); $foo = $container->getInstance(Foo::class); var_dump($container); var_dump($foo);

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.4.120.0130.00720.40
8.4.110.0040.00518.91
8.4.100.0120.00919.00
8.4.90.0080.00620.73
8.4.80.0040.00418.86
8.4.70.0120.00618.86
8.4.60.0140.00818.73
8.4.50.0060.00419.59
8.4.40.0130.00717.50
8.4.30.0160.00320.34
8.4.20.0130.00322.65
8.4.10.0100.01023.84
8.3.250.0110.00817.13
8.3.240.0140.00616.43
8.3.230.0040.00416.50
8.3.220.0100.00618.90
8.3.210.0110.00818.30
8.3.200.0090.00016.54
8.3.190.0110.00817.28
8.3.180.0120.00816.60
8.3.170.0000.00717.27
8.3.160.0070.01118.30
8.3.150.0030.00717.29
8.3.140.0120.00319.05
8.3.130.0030.00518.43
8.3.120.0030.00518.92
8.3.110.0130.00316.52
8.3.100.0130.00616.47
8.3.90.0050.00526.77
8.3.80.0100.00018.30
8.3.70.0080.00818.27
8.3.60.0040.01216.75
8.3.50.0120.00418.57
8.3.40.0060.00921.98
8.3.30.0070.00720.33
8.3.20.0050.00324.18
8.3.10.0050.00324.66
8.3.00.0090.00026.16
8.2.290.0090.01120.56
8.2.280.0160.00420.32
8.2.270.0180.00020.61
8.2.260.0040.00416.58
8.2.250.0060.00318.48
8.2.240.0090.00017.22
8.2.230.0070.00320.94
8.2.220.0120.00324.06
8.2.210.0060.00326.77
8.2.200.0060.00318.29
8.2.190.0100.00616.63
8.2.180.0070.01416.63
8.2.170.0160.00618.92
8.2.160.0110.00722.96
8.2.150.0040.00425.66
8.2.140.0040.00424.66
8.2.130.0050.00326.16
8.2.120.0040.00419.83
8.2.110.0000.01021.19
8.2.100.0080.00417.97
8.2.90.0070.00320.01
8.2.80.0040.00420.45
8.2.70.0120.00817.61
8.2.60.0190.00017.34
8.2.50.0100.00717.37
8.2.40.0090.00917.50
8.2.30.0130.00317.50
8.2.20.0050.01117.75
8.2.10.0130.00317.37
8.2.00.0160.00017.63
8.1.330.0120.00722.00
8.1.320.0120.00816.41
8.1.310.0030.00616.79
8.1.300.0090.00620.39
8.1.290.0000.01230.84
8.1.280.0060.01025.92
8.1.270.0040.00424.66
8.1.260.0080.00026.35
8.1.250.0040.00428.09
8.1.240.0040.00821.95
8.1.230.0080.00420.85
8.1.220.0000.00817.77
8.1.210.0040.00418.84
8.1.200.0120.00617.23
8.1.190.0150.00717.13
8.1.180.0160.00016.99
8.1.170.0040.01216.88
8.1.160.0190.00017.38
8.1.150.0130.00417.13
8.1.140.0150.00417.25
8.1.130.0120.00717.25
8.1.120.0150.00517.11
8.1.110.0150.00417.00
8.1.100.0090.00917.35
8.1.90.0170.00017.13
8.1.80.0140.00417.13
8.1.70.0040.01517.25
8.1.60.0120.00617.46
8.1.50.0040.00617.46
8.1.40.0130.00317.38
8.1.30.0130.00517.11
8.1.20.0140.00517.50
8.1.10.0130.00417.38
8.1.00.0170.00017.38
8.0.300.0040.00419.77
8.0.290.0180.00016.58
8.0.280.0140.00316.72
8.0.270.0160.00016.75
8.0.260.0160.00316.58
8.0.250.0160.00016.86
8.0.240.0170.00016.58
8.0.230.0150.00316.63
8.0.220.0130.00316.62
8.0.210.0110.00616.75
8.0.200.0100.00816.58
8.0.190.0100.00716.58
8.0.180.0140.00216.58
8.0.170.0140.00416.58
8.0.160.0090.00916.61
8.0.150.0130.00416.62
8.0.140.0180.00016.75
8.0.130.0090.00916.75
8.0.120.0140.00216.63
8.0.110.0100.00616.63
8.0.100.0170.00016.58
8.0.90.0110.00616.88
8.0.80.0140.00316.59
8.0.70.0130.00416.58
8.0.60.0160.00016.63
8.0.50.0130.00316.63
8.0.30.0090.00916.59
8.0.20.0120.00416.88
8.0.10.0140.00316.86

preferences:
23.39 ms | 403 KiB | 5 Q