le code utilisé pour le test :
<?php
class test
{
function test()
{
$this->arr = range(0, 100000);
$this->cnt = count($this->arr);
}
function loop1()
{
static $i = 0;
if ($i < $this->cnt)
{
$this->v = & $this->arr$i;
$i++;
return true;
}
else
{
return false;
}
}
function loop2()
{
return list(,$this->v) = each($this->arr);
}
function loop3()
{
$this->v = & current($this->arr);
if ($this->v !== false)
{
next($this->arr);
return true;
}
else
return false;
}
function loop4()
{
return (false !== $this->v = & current($this->arr) && next($this->arr));
}
function getExecutionTime($func)
{
$time_start = microtime_float();
while( $this->$func() );
$time_end = microtime_float();
$time = $time_end - $time_start;
echo '<h1>'.$func.' : '.$time.'</h1>';
reset($this->arr);
}
}
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
// main
$test = new test();
$test->getExecutionTime('loop1');
$test->getExecutionTime('loop2');
$test->getExecutionTime('loop3');
$test->getExecutionTime('loop4');
?>
Les résultats pour les 4 fonctions :
- loop1 : 0.858052968979
- loop2 : 0.82940196991
- loop3 : 0.871843099594
- loop4 : 0.780961036682
Dans la fonction 3 le paramètre & ne fait apparemment aucun effets, les temps sont identiques avec ou sans. Alors que dans la fonction 4 le & est indispensable.
Remarque : Ceci n'est pas le genre de fonction a utiliser si on doit juste parcourir un tableau, ce n'est pas le but de cet article
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.