bench-debug_backtrace.php
<?php
class Caller {
public function tryIt($theId){
return $theId.'-'.uniqid();
}
public function tryItTrace($theId){
if (\Permissions::canAccess()){
return $theId.'-'.uniqid();
}
}
}
class Runner {
public function goControl(){
$i=0;
$stack = [];
while ($i++<1000000){
$caller = new Caller();
$stack[] = $caller->tryIt(uniqid());
}
return $stack;
}
public function goTrace(){
$i=0;
$stack = [];
while ($i++<1000000){
$caller = new Caller();
$stack[] = $caller->tryItTrace(uniqid());
}
return $stack;
}
}
class Permissions {
static public function canAlwaysAccess(){
return true;
}
static public function canAccess(){
$backtrace = debug_backtrace();
// var_dump($backtrace);
// exit;
if (strlen($backtrace[1]['args'][0])>3
&&$backtrace[0]['file']=='/var/www/html/dev/dumb/bench-debug_backtrace.php'
&&$backtrace[1]['class']=='Caller'){
return true;
}
throw new \Exception("We failed");
}
}
$trace = new stdClass;
$trace->start = microtime(true);
$runner = new Runner();
$stack1 = $runner->goTrace();
$stack1 = array_slice($stack1,random_int(0,40),random_int(50,100));
$trace->end = microtime(true);
$trace->diff = floatval($trace->end - $trace->start);
///
///
///
$control = new stdClass;
$control->start = microtime(true);
$runner = new Runner();
$stack2 = $runner->goControl();
$stack2 = array_slice($stack2,random_int(0,40),random_int(50,100));
$control->end = microtime(true);
$control->diff = $control->end - $control->start;
echo "Control:\n";
var_dump($control);
echo "\n\nTrace:\n";
var_dump($trace);
print_r($stack1);
print_r($stack2);