3v4l.org

run code in 300+ PHP versions simultaneously
<?php # basic container class Container { private $raw; // callbacks private $values; // objects private $locked; public function __construct(array $config = []) { foreach($config as $id => $callback){ $this->set($id, $callback); } } public function set(string $id, callable $callback): void { if(isset($this->locked[$id])){ throw new LockedIdException(); } $this->raw[$id] = $callback; } public function get(string $id) { if(!isset($this->raw[$id])){ throw new UnknownIdException(); } if(isset($this->values[$id])){ return $this->values[$id]; } $cb = $this->raw[$id]; $val = $this->values[$id] = $cb($this); $this->locked[$id] = true; return $val; } public function has(string $id): bool { return isset($this->values[$id]); } } class Resolver { public function __construct(Container $container, WireRule ...$rules) { $this->c = $container; $this->rules = $rules; } public function get(string $class) { if(!$this->c->has($class)){ $this->c->set($class, $this->resolve($class)); } return $this->c->get($class); } public function resolve(string $class): callable { if(!class_exists($class)){ throw new UnknownIdException(); } if(!method_exists($class, '__construct')){ return function(Container $c) use ($class){ return new $class; }; } $constructor = new \ReflectionMethod($class, '__construct'); if(count($params = $constructor->getParameters()) === 0){ return function(Container $c) use ($class){ return new $class; }; } foreach($params as $param){ $args[] = $param->hasType() ? $this->getArgument($param->getType()->__toString()) : null; } return function(Container $c) use ($class, $args){ return new $class(...$args); }; } public function getArgument(string $type) { foreach($this->rules as $rule){ if($rule->match($type)){ $type = $rule->getWiredClass($type); } } return $type ? $this->get($type) : null; } } class Foo { public function __construct(Bar $bar){ $this->bar = $bar; }} class Bar { public function __construct(Baz $baz){ $this->baz = $baz; }} class Baz {} $c = new Resolver(new Container); var_dump($c->get(Foo::class));

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.3.60.0040.01118.43
8.3.50.0120.00316.34
8.3.40.0080.00818.93
8.3.30.0100.01018.86
8.3.20.0060.00319.18
8.3.10.0050.00319.04
8.3.00.0080.00017.93
8.2.180.0080.01118.18
8.2.170.0180.00422.96
8.2.160.0070.00719.08
8.2.150.0070.00324.18
8.2.140.0090.00024.66
8.2.130.0070.00026.16
8.2.120.0080.00021.11
8.2.110.0000.01019.33
8.2.100.0110.00017.83
8.2.90.0000.00818.03
8.2.80.0060.00317.97
8.2.70.0040.00417.50
8.2.60.0030.00518.03
8.2.50.0040.00418.07
8.2.40.0000.00818.22
8.2.30.0040.00418.31
8.2.20.0000.00718.27
8.2.10.0000.00818.17
8.2.00.0040.00421.27
8.1.280.0130.00325.92
8.1.270.0090.00020.73
8.1.260.0080.00026.35
8.1.250.0000.00828.09
8.1.240.0090.00322.14
8.1.230.0080.00422.63
8.1.220.0060.00317.74
8.1.210.0080.00018.87
8.1.200.0040.00417.23
8.1.190.0030.00517.23
8.1.180.0000.00818.10
8.1.170.0030.01018.54
8.1.160.0040.00418.95
8.1.150.0040.00418.81
8.1.140.0070.00017.75
8.1.130.0000.00717.50
8.1.120.0040.00417.51
8.1.110.0050.00317.43
8.1.100.0030.00517.57
8.1.90.0090.00017.40
8.1.80.0040.00417.55
8.1.70.0070.00017.54
8.1.60.0060.00317.68
8.1.50.0080.00317.57
8.1.40.0030.00517.55
8.1.30.0000.01117.57
8.1.20.0030.00617.66
8.1.10.0000.00817.67
8.1.00.0040.00417.45
8.0.300.0040.00420.15
8.0.290.0000.00916.88
8.0.280.0040.00418.50
8.0.270.0000.00716.96
8.0.260.0040.00416.93
8.0.250.0000.00717.10
8.0.240.0000.00716.97
8.0.230.0040.00416.96
8.0.220.0030.00517.05
8.0.210.0030.00317.02
8.0.200.0030.00317.04
8.0.190.0070.00017.04
8.0.180.0040.00417.05
8.0.170.0030.00616.98
8.0.160.0070.00017.08
8.0.150.0000.00717.03
8.0.140.0000.00716.98
8.0.130.0060.00013.49
8.0.120.0030.00616.91
8.0.110.0070.00016.87
8.0.100.0040.00416.87
8.0.90.0070.00017.02
8.0.80.0050.01217.00
8.0.70.0030.00616.98
8.0.60.0040.00417.01
8.0.50.0030.00516.89
8.0.30.0120.00617.16
8.0.20.0070.01317.40
8.0.10.0070.00017.02
8.0.00.0110.01216.88
7.4.330.0000.00515.55
7.4.320.0030.00316.56
7.4.300.0070.00016.52
7.4.290.0070.00016.59
7.4.280.0040.00416.52
7.4.270.0030.00316.46
7.4.260.0000.00716.61
7.4.250.0000.00716.59
7.4.240.0000.00816.44
7.4.230.0000.00716.43
7.4.220.0080.00016.52
7.4.210.0130.00816.49
7.4.200.0000.00816.71
7.4.160.0080.00816.57
7.4.140.0110.00717.86
7.4.130.0170.00316.70
7.4.120.0090.01216.50
7.4.110.0130.00316.56
7.4.100.0100.00716.46
7.4.90.0170.00716.54
7.4.80.0130.01019.39
7.4.70.0070.01016.41
7.4.60.0080.00816.44
7.4.50.0110.00416.54
7.4.40.0160.00416.84
7.4.00.0090.00814.86
7.3.330.0050.00013.23
7.3.320.0050.00013.18
7.3.310.0050.00216.40
7.3.300.0080.00016.26
7.3.290.0030.00316.46
7.3.280.0050.01316.43
7.3.260.0160.00916.54
7.3.240.0110.00716.52
7.3.230.0080.00816.49
7.3.210.0050.01416.68
7.3.200.0090.01116.52
7.3.190.0100.00616.55
7.3.180.0030.01316.43
7.3.170.0100.01016.59
7.3.160.0060.01316.49
7.3.120.0000.01814.72
7.3.110.0070.01014.61
7.3.100.0090.00914.76
7.3.90.0030.00914.65
7.3.80.0090.00915.20
7.3.70.0030.01615.01
7.3.60.0000.01114.92
7.3.50.0110.00414.86
7.3.40.0090.00914.95
7.3.30.0090.00014.64
7.3.20.0110.00016.66
7.3.10.0070.00616.35
7.3.00.0060.00816.63
7.2.330.0140.00416.71
7.2.320.0070.01716.51
7.2.310.0070.01616.67
7.2.300.0110.00716.80
7.2.290.0100.01316.79
7.2.250.0090.00915.06
7.2.240.0080.01115.31
7.2.230.0090.00614.70
7.2.220.0060.00615.12
7.2.210.0060.01215.15
7.2.200.0130.00314.98
7.2.190.0030.01315.13
7.2.180.0090.00615.28
7.2.170.0090.00615.30
7.2.130.0100.00516.47
7.2.120.0170.00616.57
7.2.110.0030.00916.55
7.2.100.0100.00316.36
7.2.90.0110.00616.60
7.2.80.0150.00416.75
7.2.70.0090.00616.78
7.2.60.0200.00715.52
7.2.50.0370.00915.79
7.2.40.0640.01115.89
7.2.30.0670.00915.91
7.2.20.0660.00815.89
7.2.10.0680.01115.94
7.2.00.0700.00616.00
7.1.330.0060.01015.76
7.1.320.0070.00615.79
7.1.310.0100.00715.43
7.1.300.0100.00315.76
7.1.290.0070.00315.80
7.1.280.0040.00715.88
7.1.270.0100.00315.61
7.1.260.0090.00615.96
7.1.250.0110.00515.45
7.1.200.0040.00415.91
7.1.170.1320.01014.05
7.1.160.0860.01316.67
7.1.150.0640.01416.41
7.1.140.1320.01616.98
7.1.130.1130.01016.61
7.1.120.0360.01116.65
7.1.110.1300.00916.04
7.1.100.1910.01016.12
7.1.90.0380.01415.95
7.1.80.1120.01316.43
7.1.70.1130.00715.39
7.1.60.1210.01633.41
7.1.50.1070.01732.98
7.1.40.1500.01632.88
7.1.30.1380.01532.80
7.1.20.1260.02032.93
7.1.10.0910.00814.68
7.1.00.1270.01215.03

preferences:
55.61 ms | 401 KiB | 5 Q