titasgailius/closure-cache

Cache method, function or closure results.

1.0 2017-05-05 20:59 UTC

This package is auto-updated.

Last update: 2024-11-12 12:53:30 UTC


README

A simple PHP cache mechanism for storing method, function or closure results.
It calculates result of the closure once and returns it on subsequent calls.

Usage

<?php

use ClosureCache\ClosureCache;

function somethingSlow()
{
    return once(function () {
        // Code...
    });
}

Installation

With composer

$ composer require titasgailius/closure-cache
{
    "require": {
        "titasgailius/closure-cache": "~1.00"
    }
}

Example

Before

<?php

use ClosureCache\ClosureCache;

class SomeClass
{
    public static function think()
    {
        sleep(10);

        return 'It takes some time to process this.';
    }
}

/**
 * 10 seconds to process it.
 */
SomeClass::think();

/**
 * Another 10 seconds to process it
 * which makes it 20 seconds in total.
 */
SomeClass::think();

After

<?php

use ClosureCache\ClosureCache;

class SomeClass
{
    public static function think()
    {
        return once(function () {
            sleep(10);

            return 'It takes some time to process this.';
        });
    }
}

/**
 * 10 seconds to process
 */
SomeClass::think();

/**
 * ClosureCache detects that this was already
 * processed and returns it from the cache.
 */
SomeClass::think();

ClosureCache is parameter-sensitive

<?php

use ClosureCache\ClosureCache;

class SomeClass
{
    public static function think($message)
    {
        return once(function () use ($message) {
            sleep(10);

            return $message;
        });
    }
}

/**
 * 10 seconds to process
 */
SomeClass::think('foo');

/**
 * Another 10 seconds to process it because
 * different parameters were passed.
 */
SomeClass::think('bar');