我创建了两个函数:
function script_start_time()
{
$start_time = microtime(TRUE);
return $start_time;
}
和
function script_end_time()
{ $start = script_start_time();
$end_time = microtime(TRUE);
$time_taken = $end_time - $start;
$time_taken = round($time_taken, 4);
echo 'Page generated in '.$time_taken.' seconds.';
}
function script_start_time()
在header.php
中 称为 ,function script_end_time
称为 in footer.php
我尝试在[{1}}中使用$start_time
值,而不使用function script_end_time
或global
。目前我在回声中得到0,我知道这是不正确的。
这些功能在哪里出错,因为似乎static
覆盖$start
,而不是保留function script_end_time
的值。
答案 0 :(得分:3)
问题是您的script_start_time
函数从不保存 $start_time
的值,而是在调用函数时始终覆盖它。因此,无论何时调用该函数,您都可以有效地询问当前时间。
如果您稍微调整一下代码,那么它应该按预期工作:
function script_start_time()
{
// SAVE the value of $start_time the first time it is requested
static $start_time;
if (empty($start_time))
{
$start_time = microtime(TRUE);
}
return $start_time;
}
function script_end_time()
{
$start = script_start_time();
$end_time = microtime(TRUE);
$time_taken = $end_time - $start;
$time_taken = round($time_taken, 4);
echo 'Page generated in '.$time_taken.' seconds.';
}
script_start_time();
usleep(5000);
script_end_time(); // Page generated in 0.0052 seconds.
答案 1 :(得分:2)
function script_start_time()
{
return microtime(TRUE);
}
function script_end_time($start_time)
{
$end_time = microtime(TRUE);
$time_taken = $end_time - $start_time;
$time_taken = round($time_taken, 4);
echo 'Page generated in '.$time_taken.' seconds.';
}
$start_time = script_start_time();
usleep(4000);
script_end_time($start_time);
答案 2 :(得分:1)
您可以使用类:
,而不是使用相同的函数来保存开始时间并检索它class Timer {
private static $start_time;
public static function start() {
self::$start_time = microtime(TRUE);
}
public static function show_time_since_start() {
$end_time = microtime(TRUE);
$time_taken = $end_time - self::$start_time;
$time_taken = round($time_taken, 4);
echo 'Page generated in '.$time_taken.' seconds.';
}
}
然后在脚本的开头打电话:
Timer::start();
最后你做了:
Timer::show_time_since_start();
实际上,我不会将echo
语句放在函数中。我只会创建一个返回$time_taken
的函数,并在调用者中进行打印。
而不是只有一个计时器,你可以更改类,因此$start_time
是一个对象属性而不是类属性,然后你可以创建多个计时器,每个计时器记住不同的开始时间。