Skip to content

Instantly share code, notes, and snippets.

@innocenzi
Forked from calebporzio/memoize.php
Last active March 16, 2023 14:18
Show Gist options
  • Save innocenzi/12f8e9da6af1864d733395321598084e to your computer and use it in GitHub Desktop.
Save innocenzi/12f8e9da6af1864d733395321598084e to your computer and use it in GitHub Desktop.
<?php
/**
* @template T
* @param T $target
* @return T
*/
function memoize($target) {
static $memo = new \WeakMap();
return new class ($target, $memo) {
function __construct(
protected $target,
protected &$memo,
) {}
function __call($method, $params)
{
$this->memo[$this->target] ??= [];
$signature = $method . crc32(json_encode($params));
return $this->memo[$this->target][$signature]
??= $this->target->$method(...$params);
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment