Skip to content

Latest commit

 

History

History
43 lines (34 loc) · 1.21 KB

memoize.md

File metadata and controls

43 lines (34 loc) · 1.21 KB
标题 标签
memoize(缓存函数) function,advanced(函数,高级的)

返回记忆化(缓存)函数。

  • 通过实例化新数组创建一个空缓存。
  • 返回一个函数,该函数接受一个参数,该参数将提供给记忆化函数,方法是首先检查该函数针对该特定输入值的输出是否已缓存,否则存储并返回该输出。
  • 通过将缓存设置为返回函数的属性来允许访问缓存。

代码如下:

function memoize($fn){
    return function use ($fn){
        static $cache = [];
        $args = func_get_args();
        $key = serialize($args);
        $cached = true;

        if(!isset($cache[$key])){
            $cached = false;
            $cache[$key] = $fn(...$args);
        }

        return ['result' => $cache[$key], 'cached' => $cached]
    }
}

使用方式:

$memoizedAdd = memoize(
  function ($num) {
    return $num + 10;
  }
);

var_dump($memoizedAdd(5)); // ['result' => 15, 'cached' => false]
var_dump($memoizedAdd(6)); // ['result' => 16, 'cached' => false]
var_dump($memoizedAdd(5)); // ['result' => 15, 'cached' => true]