PHP extension which transparently caches PHP functions


php-memoize is a PHP extension which transparently caches PHP functions, much like Perl's Memoize module.

It comes with the following storage modules which can be enabled at compile time:

  • memory: Simple per-request module with no dependencies. Since this is a per-request cache, neither TTLs specified in the memoize() call or memoize.default_ttl are used.
  • memcached: Uses libmemcached or the memcached PHP extension
  • apc: Uses the APC PHP extension

It also provides a simple interface (php_memoize_storage.h) if you want to define your own storage modules as PHP extensions.



function my_expensive_function($x) {
    return $x . 'bar';


// 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

N.B. Do not memoize functions which have side-effects or depend on anything other than their arguments, such as global variables or the current time.


bool memoize(mixed $callback [, int $ttl = 0 ])

Registers a function to be memoized. Like the callbacks taken for example by call_user_func(), $callback can be a string containing a function name or an array containing a class or object and a method name.

Unlike normal callbacks, it can refer to methods which aren't callable from this scope (e.g. private methods.) It can also refer to non-static methods as if they were static, so you don't need to have an instance available when you register the method.

The option $ttl argument specifies how long calls will be cached for (in seconds). If not provided or set to 0, the memoize.default_ttl ini setting is used.

Returns true if the function was successfully registered, or false and raises an E_WARNING error otherwise.

bool memoize_has_storage(string $module_name)

Returns whether the storage module with the given name is available.

bool memoize_memcached_set_connection(Memcached $m)

Sets an existing Memcached object to be be used for memoize storage, instead of creating a new connection using the servers defined in memoize.memcached.servers. This function is only available when the memcached extension is present, and only applicable when memoize.storage_module is set to "memcached".


All of the below ini settings can be changed at any time (PHP_INI_ALL).


memoize.storage_module String The storage module to use ("memory", "apc" or "memcached")
memoize.cache_namespace String A string to prepend to all cache keys, so that separate applications can use the same storage without conflicts.
memoize.default_ttl Integer The default number of seconds to store cache entries for (defaults to 3600, one hour.)


memoize.memcached.servers String A [libmemcached configuration string]( (e.g. "--SERVER= --SERVER="). This is only used if a connection hasn't been supplied by memoize_memcached_set_connection().


See Compiling shared PECL extensions with phpize for general instructions. The available configure options can be listed with configure --help.