<?php

class SingleCallback
{
    public function 
log() { }
}

class 
DoubleCallback
{
    private 
$_callback null;
    public function 
__construct() {
        
$this->_callback = new SingleCallback();
    }
    
    public function 
log()
    {
        return 
$this->_callback->log();
    }
}

class 
MultiDoubleCallback
{
    private 
$_callbacks = array();
    public function 
__construct() {
        
$this->_callbacks[] = new SingleCallback();
    }
    
    public function 
log()
    {
        foreach (
$this->_callbacks as $callback) {
            
$callback->log();
        }
    }
}

$classes = array(
    
'Single',
    
'Double',
    
'MultiDouble',
);

$times = array(
    
'Single' => array(),
    
'Double' => array(),
    
'MultiDouble' => array(),
);

for (
$count 0$count 10$count++) {
    foreach (
$classes as $class) {
        
$start microtime(true);
        
$class_name $class 'Callback';
        
$obj = new $class_name();
        for (
$i 0$i 1000$i++ ) {
            
$obj->log();
        }
        
$times[$class][] = microtime(true) - $start;
    }
}

echo 
"<pre>\n";
foreach (
$times as $type => $times) {
    echo 
"{$type} took:\n";
    foreach (
$times as $key => $time) {
        echo 
"  Run {$key}: {$time}\n";
    }
    echo 
"\n";
}