3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Request { public $answer = 42; public function __construct() { echo 'Request created', PHP_EOL; } } class DI { protected $shared = []; protected $definitions = []; public function __construct() {} public function set($name, $definition, $shared = false) { if($shared) { if(isset($shared[$name])) { throw new Exception("Definition '$name' is already set. Use DI::remove('$name') to remove it."); } $this->shared[$name] = $definition; } else { if(isset($definitions[$name])) { throw new Exception("Definition '$name' is already set. Use DI::remove('$name') to remove it."); } $this->definitions[$name] = $definition; } } public function getRaw($name) { if(!isset($this->definitions[$name])) { throw new Exception("Definition '$name' is not set. Use DI::set('$name', <definition>) to set it."); } return $this->definitions[$name]; } public function get($name) { $definition = $this->getRaw($name); if(is_callable($definition)) return $definition(); if(class_exists($definition)) ? return new $definition(); } public function getShared($name) { if(!isset($this->shared[$name])) { throw new Exception("Shared definition '$name' is not set. Use DI::set('$name', <definition>, true) to set it."); } $shared = $this->shared[$name]; if(is_callable($shared)) $this->shared[$name] = $shared(); else if(class_exists($shared)) ? $this->shared[$name] = new $shared(); return $this->shared[$name]; } } $di = new DI(); //Using an anonymous function $di->set('request1', function(){ return new Request(); }, true); //Using an anonymous function $di->set('request2', 'Request', true); $request = $di->getShared('request2'); var_dump($request);

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)
5.4.340.0060.03412.04
5.4.320.0060.03512.53
5.4.310.0050.03812.53
5.4.300.0050.03712.53
5.4.290.0060.03812.52
5.4.280.0060.03512.42
5.4.270.0050.03712.42
5.4.260.0060.03712.42
5.4.250.0060.03612.42
5.4.240.0070.03412.42
5.4.230.0050.03812.41
5.4.220.0050.03712.41
5.4.210.0040.03612.41
5.4.200.0050.03712.41
5.4.190.0080.03312.41
5.4.180.0070.03412.41
5.4.170.0090.03712.41
5.4.160.0060.03612.41
5.4.150.0070.03512.41
5.4.140.0050.03712.10
5.4.130.0050.03612.08
5.4.120.0060.03412.04
5.4.110.0060.03512.04
5.4.100.0070.03712.04
5.4.90.0040.03912.04
5.4.80.0070.03512.04
5.4.70.0080.03412.04
5.4.60.0070.03312.04
5.4.50.0040.03712.03
5.4.40.0070.03312.02
5.4.30.0080.03312.02
5.4.20.0050.03512.01
5.4.10.0030.03612.02
5.4.00.0050.03511.51
5.3.290.0070.03712.80
5.3.280.0070.03612.71
5.3.270.0060.03712.72
5.3.260.0070.03712.72
5.3.250.0060.03612.72
5.3.240.0070.03612.72
5.3.230.0060.03712.71
5.3.220.0060.03912.68
5.3.210.0070.03712.68
5.3.200.0040.03812.68
5.3.190.0110.03212.68
5.3.180.0050.03612.67
5.3.170.0050.03712.67
5.3.160.0050.03812.67
5.3.150.0060.04212.67
5.3.140.0050.03712.66
5.3.130.0070.03712.66
5.3.120.0060.03912.66
5.3.110.0050.04012.66
5.3.100.0100.03512.13
5.3.90.0050.03712.10
5.3.80.0080.03412.09
5.3.70.0060.03612.09
5.3.60.0080.03412.08
5.3.50.0070.03412.02
5.3.40.0060.03512.04
5.3.30.0050.03511.98
5.3.20.0050.03711.76
5.3.10.0060.03911.73
5.3.00.0070.03411.71
5.2.170.0060.0279.23
5.2.160.0030.0309.22
5.2.150.0060.0289.23
5.2.140.0040.0299.22
5.2.130.0040.0289.18
5.2.120.0040.0289.18
5.2.110.0030.0309.18
5.2.100.0070.0259.18
5.2.90.0070.0329.18
5.2.80.0090.0349.17
5.2.70.0030.0319.17
5.2.60.0100.0269.13
5.2.50.0040.0319.10
5.2.40.0050.0339.08
5.2.30.0040.0359.05
5.2.20.0040.0289.04
5.2.10.0020.0298.95
5.2.00.0010.0318.80
5.1.60.0070.0208.09
5.1.50.0060.0228.09
5.1.40.0020.0268.07
5.1.30.0020.0278.41
5.1.20.0030.0278.43
5.1.10.0020.0278.17
5.1.00.0050.0248.16
5.0.50.0050.0196.64
5.0.40.0040.0186.50
5.0.30.0010.0346.31
5.0.20.0030.0216.28
5.0.10.0030.0206.26
5.0.00.0040.0296.25
4.4.90.0010.0174.78
4.4.80.0040.0164.75
4.4.70.0010.0214.75
4.4.60.0060.0224.76
4.4.50.0040.0214.77
4.4.40.0030.0284.71
4.4.30.0010.0164.76
4.4.20.0020.0224.84
4.4.10.0020.0224.84
4.4.00.0030.0274.76
4.3.110.0020.0184.67
4.3.100.0050.0224.67
4.3.90.0020.0154.63
4.3.80.0020.0254.59
4.3.70.0020.0154.63
4.3.60.0060.0114.63
4.3.50.0050.0144.63
4.3.40.0020.0284.54
4.3.30.0010.0173.30
4.3.20.0020.0163.28
4.3.10.0020.0173.23
4.3.00.0100.0207.89

preferences:
142.1 ms | 1394 KiB | 7 Q