今年,我使用严格开箱即用的PHP(受虐狂,我知道)为自己设定了应对代码挑战的挑战。在大多数情况下,它运作得很好,但我遇到了一些问题,我不确定如何最好地做我想做的事情。
假设我的代码中有几个地方,我试图优化性能,并且我写了类似的内容:
function rutime($ru, $rus, $index) {
return ($ru["ru_$index.tv_sec"]*1000 + intval($ru["ru_$index.tv_usec"]/1000))
- ($rus["ru_$index.tv_sec"]*1000 + intval($rus["ru_$index.tv_usec"]/1000));
}
$ruStart = getrusage();
$array = array_fill(1,1000000,'1');
$ruEnd = getrusage();
echo 'Built array in ', rutime($ruEnd, $ruStart, 'utime'), 'ms. ', PHP_EOL;
$ruStart = getrusage();
unset($array[456789]);
unset($array[567890]);
unset($array[678901]);
$ruEnd = getrusage();
echo 'Unset three values in ', rutime($ruEnd, $ruStart, 'utime'), 'ms. ', PHP_EOL;
$ruStart = getrusage();
$count = count($array);
$ruEnd = getrusage();
echo 'Counted array size (', $count, ') in ', rutime($ruEnd, $ruStart, 'utime'), 'ms. ', PHP_EOL;
$ruStart = getrusage();
$array = array_values($array);
$ruEnd = getrusage();
echo 'Renumbered array in ', rutime($ruEnd, $ruStart, 'utime'), 'ms. ', PHP_EOL;
$ruStart = getrusage();
$count = count($array);
$ruEnd = getrusage();
echo 'Counted array size (', $count, ') in ', rutime($ruEnd, $ruStart, 'utime'), 'ms. ', PHP_EOL;
现在,这里的输出将告诉我我所做的各种事情的速度有多快,但我确实想避免重复代码的很多。
我想要做的是构建一个功能,它将解析我的代码并运行它,给我输出,并且永远不会丢失范围,无论它是什么,我正在通过它。想象一下:
showRunTime("$array = array_fill(1,1000000,'1');");
我希望这个函数做的是实际创建数组并让它可用于下一行,可能只是print_r($array);
或类似的东西,但我希望函数实际输出它是什么我正在做的事。显而易见:
function showRunTime($command) {
$ruStart = getrusage();
eval($command);
$ruEnd = getrusage();
echo rutime($ruEnd, $ruStart, 'utime');
}
显然,由于eval()
没有适合命令内容的范围,显然不会工作。有什么想法吗?