3v4l.org

run code in 300+ PHP versions simultaneously
<?php interface BarInterface{} function getMemoryUsage($size){ static $unit=['b','kb','mb','gb','tb','pb']; return $size > 0 ? @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i] : 0 . ' byte'; } class Bar implements BarInterface { public function run() { return true; } } class Foo { public function variadic(\BarInterface ...$bars) { foreach ($bars as $bar) { $bar->run(); } } public function iterated(array $bars) { foreach ($bars as $bar) { if (!$bar instanceof \BarInterface) { throw new \TypeError('Invalid BarInterface specified'); } } foreach ($bars as $bar) { $bar->run(); } } } $bars = []; for ($i=0; $i<10000 ;$i++) { $bars[] = new \Bar(); } $foo = new Foo(); $items = \count($bars); //initial call to reduce overhead $foo->variadic(...[]); $foo->iterated([]); microtime(true); memory_get_usage(true); //benchmark start $start = new \DateTime(); $mem_start = memory_get_usage(true); $foo->variadic(...$bars); $mem_variadic = memory_get_usage(true); $variadic = new \DateTime(); $variadicDiff = $start->diff($variadic)->format('%f'); printf('%sms (variadic passed %d %s increase)', $variadicDiff, $items, getMemoryUsage($mem_variadic-$mem_start)); echo \PHP_EOL . '--------' . \PHP_EOL; $start = new \DateTime(); $mem_start = memory_get_usage(true); $foo->iterated($bars); $mem_iterated = memory_get_usage(true); $iterated = new \DateTime(); $iteratedDiff = $start->diff($iterated)->format('%f'); printf('%sms (iterated passed %d %s increase)', $iteratedDiff, $items, getMemoryUsage($mem_iterated-$mem_start)); echo \PHP_EOL . '--------' . \PHP_EOL; if ($variadicDiff > $iteratedDiff) { $loser = 'Variadic'; $diff = $variadicDiff - $iteratedDiff; $loss = $diff / $iteratedDiff; } else { $loser = 'Iterated'; $diff = $iteratedDiff - $variadicDiff; $loss = $diff / $variadicDiff; } printf('%s was slower by %.2f%% (%d ms)', $loser, $loss * 100, $diff);

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.1.70.0100.00619.32
8.1.60.0240.00019.47
8.1.50.0170.00419.49
8.1.40.0100.01019.46
8.1.30.0160.00419.50
8.1.20.0180.00319.50
8.1.10.0120.00619.36
8.1.00.0090.00419.50
8.0.200.0100.00318.65
8.0.190.0130.00018.70
8.0.180.0090.00518.70
8.0.170.0090.00518.79
8.0.160.0080.00818.76
8.0.150.0120.00518.66
8.0.140.0000.01418.68
8.0.130.0100.00518.60
8.0.120.0100.00718.63
8.0.110.0150.00018.64
8.0.100.0080.00818.70
8.0.90.0100.00718.68
8.0.80.0160.00018.71
8.0.70.0080.00818.61
8.0.60.0120.00418.69
8.0.50.0060.01118.62
8.0.30.0150.00318.46
8.0.20.0090.00918.60
8.0.10.0050.01418.69
8.0.00.0140.00018.81
7.4.300.0110.00718.28
7.4.290.0130.00018.20
7.4.280.0090.00518.10
7.4.270.0060.00918.19
7.4.260.0160.00418.34
7.4.250.0000.01418.14
7.4.240.0050.00518.18
7.4.230.0060.00918.14
7.4.220.0050.01018.07
7.4.210.0070.00717.88
7.4.200.0100.00518.33
7.4.190.0120.00618.23
7.4.180.0120.00618.41
7.4.160.0110.00518.35
7.4.150.0000.01517.96
7.4.140.0050.00918.05
7.4.130.0080.00818.13
7.4.120.0150.00018.00
7.4.110.0130.00418.21
7.4.100.0110.00718.14
7.4.90.0060.00817.85
7.4.80.0050.00717.89
7.4.70.0070.01018.26
7.4.60.0060.00818.27
7.4.50.0060.00717.95
7.4.40.0060.00918.10
7.4.30.0110.00318.18
7.4.20.0000.01418.08
7.4.10.0080.00917.43
7.4.00.0100.01017.38
7.3.330.0150.00717.97
7.3.320.0140.00518.07
7.3.310.0060.01217.90
7.3.300.0140.00718.07
7.3.290.0200.00217.95
7.3.280.0110.01118.11
7.3.270.0120.00818.19
7.3.260.0100.01018.10
7.3.250.0120.00818.11
7.3.240.0180.00318.01
7.3.230.0130.00718.10
7.3.220.0090.01118.12
7.3.210.0120.00917.96
7.3.200.0090.01018.19
7.3.190.0170.00517.87
7.3.180.0160.00617.91
7.3.170.0100.00918.09
7.3.160.0170.00318.09
7.3.150.0140.00717.98
7.3.140.0150.00618.14
7.3.130.0110.01017.42
7.3.120.0100.01117.39
7.3.110.0090.01417.53
7.3.100.0070.01217.47
7.3.90.0100.01117.22
7.3.80.0080.01117.06
7.3.70.0130.00617.22
7.3.60.0080.01217.13
7.3.50.0090.01217.06
7.3.40.0090.01016.86
7.3.30.0110.01017.01
7.3.20.0130.01018.11
7.3.10.0310.01017.95
7.3.00.0120.01218.05
7.2.340.0100.00818.32
7.2.330.0090.00918.51
7.2.320.0090.00918.48
7.2.310.0060.01318.38
7.2.300.0150.00318.43
7.2.290.0090.00918.50
7.2.280.0070.01118.53
7.2.270.0180.00018.28
7.2.260.0060.01517.70
7.2.250.0080.01317.94
7.2.240.0060.01417.94
7.2.230.0090.01017.70
7.2.220.0120.01017.47
7.2.210.0080.01217.50
7.2.200.0080.01217.67
7.2.190.0100.01117.50
7.2.180.0060.01417.59
7.2.170.0110.01317.37
7.2.160.0070.01617.26
7.2.150.0100.01218.41
7.2.140.0130.01018.48
7.2.130.0080.01418.52
7.2.120.0110.01318.56
7.2.110.0100.01018.59
7.2.100.0140.00918.59
7.2.90.0120.01418.51
7.2.80.0190.01318.49
7.2.70.0120.01118.54
7.2.60.0110.01118.43
7.2.50.0120.01318.46
7.2.40.0110.01118.61
7.2.30.0170.00718.46
7.2.20.0320.01018.46
7.2.10.0100.01318.55
7.2.00.0120.01218.62
7.1.330.0090.00918.91
7.1.320.0100.01217.96
7.1.310.0100.01018.00
7.1.300.0350.01117.91
7.1.290.0060.01517.89
7.1.280.0110.01217.41
7.1.270.0100.01217.51
7.1.260.0100.00917.30
7.1.250.0090.01217.32
7.1.240.0040.01519.00
7.1.230.0070.01119.07
7.1.220.0080.00818.93
7.1.210.0100.00719.04
7.1.200.0120.00618.85
7.1.190.0100.01019.05
7.1.180.0080.01118.74
7.1.170.0080.00918.80
7.1.160.0090.00918.97
7.1.150.0080.01218.82
7.1.140.0060.01318.79
7.1.130.0090.01118.99
7.1.120.0090.00819.01
7.1.110.0020.01418.90
7.1.100.0060.01418.82
7.1.90.0070.01318.94
7.1.80.0100.01018.79
7.1.70.0050.01518.91
7.1.60.0070.01218.97
7.1.50.0060.01419.12
7.1.40.0090.00919.02
7.1.30.0050.01418.94
7.1.20.0070.01218.95
7.1.10.0090.00718.97
7.1.00.0070.01018.86

preferences:
30.79 ms | 403 KiB | 5 Q