- microtime: documentation ( source)
- str_repeat: documentation ( source)
- urldecode: documentation ( source)
- urlencode: documentation ( source)
- number_format: documentation ( source)
<?php
class ValueEncoder
{
public function encode($value)
{
$result = urlencode($value);
return $result;
}
}
class ValueDecoder
{
public function decode($value)
{
$result = urldecode($value);
return $result;
}
}
class RefEncoder
{
public function encode(&$value)
{
$value = urlencode($value);
}
}
class RefDecoder
{
public function decode(&$value)
{
$value = urldecode($value);
}
}
function genData()
{
return str_repeat('test', 2000000);
}
function valueTranscode() {
$data = genData();
$encoder = new ValueEncoder();
$decoder = new ValueDecoder();
$data = $encoder->encode($data);
$data = $decoder->decode($data);
$data = strlen($data);
}
function refTranscode() {
$data = genData();
$encoder = new RefEncoder();
$decoder = new RefDecoder();
$encoder->encode($data);
$decoder->decode($data);
$data = strlen($data);
}
$isRef = isset($argv[1]) && 'ref' === $argv[1];
echo ($isRef ? 'Ref: ' : 'Value: ');
$s = microtime(true);
for ($i = 0; $i < 20; ++$i)
{
if ($isRef)
{
refTranscode();
}
else
{
valueTranscode();
}
}
$d = microtime(true) - $s;
echo number_format($d, 2) . ' s, ';
#echo number_format(memory_get_peak_usage(true)/1000/1000,2) . ' MB'. PHP_EOL;