AUTORE
andr3a
DESCRIZIONE
Test per confrontare le performance dei vari metodi possibili per richiamare un metodo di un'istanza di classe.
CATEGORIA
PERFORMANCE/CLASSES
DIPENDENZE
CODICE
Codice PHP:
<?php
$class = 'DirectEvalCallStringFuncTimeUnitTest';
$iterations = 100000;
$methods = array
(
'TestDirect' => 'Test direct method call',
'TestEval' => 'Test method using evaluation',
'TestCall' => 'Test magic __call method',
'TestString' => 'Test automatic string evaluation',
'TestFunc' => 'Test call_user_func core function'
);
class DataToTest {
public function __call($method, $arguments){
return $this->callMe();
}
public function callMe(){
return;
}
}
$dataToTest = new DataToTest;
class DirectEvalCallStringFuncTimeUnitTest
{
public static function TestDirect($Iterations, $DataToTest)
{
$duration = 0;
for($iteration = 0; $iteration < $Iterations; $iteration++)
{
$startTime = microtime(true);
$DataToTest->callMe();
$duration += microtime(true) - $startTime;
}
return $duration;
}
public static function TestEval($Iterations, $DataToTest)
{
$duration = 0;
for($iteration = 0; $iteration < $Iterations; $iteration++)
{
$startTime = microtime(true);
eval('$DataToTest->callMe();');
$duration += microtime(true) - $startTime;
}
return $duration;
}
public static function TestCall($Iterations, $DataToTest)
{
$duration = 0;
for($iteration = 0; $iteration < $Iterations; $iteration++)
{
$startTime = microtime(true);
$DataToTest->callYou();
$duration += microtime(true) - $startTime;
}
return $duration;
}
public static function TestString($Iterations, $DataToTest)
{
$duration = 0;
$method = 'callMe';
for($iteration = 0; $iteration < $Iterations; $iteration++)
{
$startTime = microtime(true);
$DataToTest->$method();
$duration += microtime(true) - $startTime;
}
return $duration;
}
public static function TestFunc($Iterations, $DataToTest)
{
$duration = 0;
for($iteration = 0; $iteration < $Iterations; $iteration++)
{
$startTime = microtime(true);
call_user_func(array(&$DataToTest, 'callMe'));
$duration += microtime(true) - $startTime;
}
return $duration;
}
}
require_once('TimeUnitTesting.php');
?>