php:関数のメモ化 高速化・最適化技法

たまたま辿り付いた記事(http://tm.root-n.com/programming:php:etc:memoization)
にて知らなかった方法が書かれていたのでメモ

function内のstatic変数に一度処理した結果を残していって
2回目以降は残しておいた結果を利用して高速化`(*'-')/

<?php
function getSum($num) {
	static $cache = array();
	if (isset($cache[$num])) {
		return $cache[$num];
	}
	$i = 0;
	$ret = 0;
	while ($i <= $num) {
		$ret = $ret + $i;
		$i++;
	}
	$cache[$num] = $ret;
	return $ret;
}

$i = 0;
$s = microtime(true);
while ($i < 10000) {
	getSum($i);
	$i++;
}
$ret = microtime(true) - $s;
print(round($ret, 6));
print("<br>");


$i2 = 0;
$s2 = microtime(true);
while ($i2 < 10000) {
	getSum($i2);
	$i2++;
}
$ret2 = microtime(true) - $s2;
print(round($ret2, 6));

?>

結果

1回目:4.661263
2回目:0.005207