通过函数运行代码而不会丢失PHP

时间:2016-12-29 16:09:42

标签: php

今年,我使用严格开箱即用的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()没有适合命令内容的范围,显然不会工作。有什么想法吗?

0 个答案:

没有答案