<?php
function report($name, $time) {
static $last = null;
printf("%-12s: %.8fms", $name, $time);
if (null !== $last) {
printf(", %.1f%%", (($time - $last)/$last)*100);
}
echo PHP_EOL;
$last = $time;
}
$iterations = 100000;
$a = str_repeat('a', 2<<8);
$times = array(
"loop" => 0,
"direct" => 0,
"static" => 0,
"object" => 0
);
class Os {
public static function strcmp($a) {
strcmp($a, $a);
}
}
class Om {
public function strcmp($a) {
strcmp($a, $a);
}
}
$o = new Om();
$start = microtime(true);
for ($x=0; $x<$iterations; ++$x) {}
$end = microtime(true) - $start;
$times["loop"]+= $end;
$start = microtime(true);
for ($x=0; $x<$iterations; ++$x) {
strcmp($a, $a);
}
$end = microtime(true) - $start;
$times["direct"]+= $end;
$start = microtime(true);
for ($x=0; $x<$iterations; ++$x) {
Os::strcmp($a);
}
$end = microtime(true) - $start;
$times["static"]+= $end;
$start = microtime(true);
for ($x=0; $x<$iterations; ++$x) {
$o->strcmp($a);
}
$end = microtime(true) - $start;
$times["object"]+= $end;
foreach ($times as $name => $time) {
report($name, ($time/$iterations)*1000);
}
preferences:
26.43 ms | 408 KiB | 5 Q