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);

preferences:
37.38 ms | 402 KiB | 5 Q