<?php
class A
{
}
class First
{
protected $collection;
public function __construct(array $items)
{
$this->collection = (function (A ...$items) {
return $items;
})(...$items);
}
};
class Second
{
protected $collection;
public function __construct(array $items)
{
foreach ($items as $item) {
if (!($item instanceof A) {
throw new Exception();
}
}
$collection = $items;
}
};
$given = [
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
new A(),
];
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
new First($given);
}
echo "First: " . (microtime(true) - $start) . PHP_EOL;
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
new Second($given);
}
echo "Second: " . (microtime(true) - $start) . PHP_EOL;
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).