PHP Memoize

Вчера ради интереса пересматривал 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

В общем идея понятна, на уникальность никак не претендует, но свою нишу может занять. Зачем использовать свой велосипед? Модуль на GitHub Модули в Pecl


memcached, memoize, php