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');
?>