zenstruck/memoize

Helper trait to efficiently cache expensive methods in memory.

Fund package maintenance!
kbond

v0.1.0 2023-04-26 14:34 UTC

This package is auto-updated.

Last update: 2024-04-17 16:14:17 UTC


README

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.