<?php
class Test {
private $arguments = array(1,2,3);
public function foo() {
$closureToCall = 'max'; //this function accepts multiple args
$start = microtime(true);
for ($i=0; $i<1e5; $i++) {
$args = $this->arguments;
switch (count($args)) {
case 0:
$closureToCall();
case 1:
$closureToCall($args[0]);
case 2:
$closureToCall($args[0], $args[1]);
case 3:
$closureToCall($args[0], $args[1], $args[2]);
case 4:
$closureToCall($args[0], $args[1], $args[2], $args[3]);
case 5:
$closureToCall($args[0], $args[1], $args[2], $args[3], $args[4]);
default:
forward_static_call_array($closureToCall, $args);
}
}
$end = microtime(true);
echo "Took: ", ($end-$start)*1e3, " ms";
$start = microtime(true);
for ($i=0; $i<1e5; $i++) {
$args = $this->arguments;
$closureToCall(...$args);
}
$end = microtime(true);
echo "Took: ", ($end-$start)*1e3, " ms";
}
}
$obj = new Test;
$obj->foo();
preferences:
24.15 ms | 402 KiB | 5 Q