Skip to content

Helper trait to efficiently cache expensive methods in memory.

License

Notifications You must be signed in to change notification settings

zenstruck/memoize

Repository files navigation

zenstruck/memoize

CI codecov

Helper trait to efficiently cache expensive methods in memory.

Installation

composer require zenstruck/memoize

Usage

Add the memoize trait to an object you wish to cache operations on.

use Zenstruck\Memoize;

class MyObject
{
    use Memoize;

    public function method1(): mixed
    {
        // cache key defaults to the method name "method1"
        return $this->memoize(
            fn() => $this->someExpensiveOperation() // called only the first time method1() is called
        );
    }

    public function method2(): mixed
    {
        return $this->memoize(
            fn() => $this->someExpensiveOperation(),
            'my_custom_cache_key' // explicitly set the cache key
        );
    }

    public function method3(string $parameter): mixed
    {
        return $this->memoize(
            fn() => $this->someExpensiveOperation($parameter) // called once per unique parameter
            'my_custom_cache_key'.$parameter, // cache key includes the parameter
        )
    }

    public function refresh(): void
    {
        $this->clearMemoized(); // clear all cached values for this object instance
        $this->clearMemoized('method1'); // clear just the cached value for "method1"
    }
}

Note: The cached values are stored in a WeakMap keyed by each object's instance. They are automatically cleared as the objects are garbage collected.

About

Helper trait to efficiently cache expensive methods in memory.

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Languages