Вчера ради интереса пересматривал pecl каталог модулей для php, наткнулся на интересный модуль memoize. Вспомнил, что сам делал его реализацию на уровне php+memcached.
Идея модуля крайне проста, у вас есть функция, результаты которой зависят исключительно от входных параметров, с помощью memoize можно закэшировать результаты выполнения и в последующие вызовы пересчет производиться не будет.
Так же нужно понимать, что код будет выполнен только один раз, поэтому использование, например, sql запросов в ф-ции не допустимо. Недопустимо использование global и его аналогов Static::$data
, недопустимо использование ветвлений в зависимости от времени или окружения.
function my_expensive_function($x) {
sleep(10);
return $x . 'bar';
}
memoize('my_expensive_function');
// now calls to my_expensive_function() are cached by their arguments
echo my_expensive_function('foo'); // returns "foobar" in 10s
echo my_expensive_function('foo'); // returns "foobar" in 0.0001s
В общем идея понятна, на уникальность никак не претендует, но свою нишу может занять. Зачем использовать свой велосипед?