PHP extension which transparently caches PHP functions
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
tests
.gitignore
CREDITS
EXPERIMENTAL
README.md
config.m4
config.w32
memoize.c
memoize_apc.c
memoize_memcached.c
memoize_memory.c
php_memoize.h
php_memoize_storage.h

README.md

Introduction

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.

Usage

<?php

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

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.

Functions

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".

Settings

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

General

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.)

Memcached

memoize.memcached.servers String A [libmemcached configuration string](http://docs.libmemcached.org/libmemcached_configuration.html) (e.g. "--SERVER=127.0.0.1 --SERVER=10.0.2.2:22122"). This is only used if a connection hasn't been supplied by memoize_memcached_set_connection().

Installation

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