c01l/phpdecorator-memo

使用Python风格的装饰器模式为PHP方法提供记忆化。

1.0.0 2021-12-30 01:53 UTC

This package is not auto-updated.

Last update: 2024-09-20 14:00:58 UTC


README

phpdecorator库扩展可以用来根据参数在内存中存储返回值。

此库使用函数的参数来构建缓存键以缓存函数调用结果。

如何使用它?

  1. Memo属性添加到函数中。
  2. 指定如何构建缓存键。
class TestClass
{
    #[Memo(["bar"])]
    public function foo(int $bar, int $x): int
    {
        return $x;
    }
}

$obj = new TestClass();
$obj = (new \C01l\PhpDecorator\DecoratorManager())->decorate($obj);

$obj->foo(1,2) // 2
$obj->foo(2,3) // 3
$obj->foo(1,3) // 2, because foo is not really executed again, but the cached version is used

使用复杂记忆化键

键可以由多个值组成,通过向数组添加更多元素

#[Memo(["bar", "x"])]
public function foo($bar, $x) { return $x; }

不使用字段将导致函数只被调用一次,不同的参数不会被考虑。

#[Memo]
public function foo($bar, $x) { return $x; }

...

$obj->foo(1,2); // 2
$obj->foo(1,3); // 2
$obj->foo(2,5); // 2
$obj->foo(4,6); // 2

您可以在键定义中使用任意表达式。

class A {
    public int $x, $y, $z;
    public function getX() { return $x; }
}

...

#[Memo(["bar->z", "bar->getX()"])]
public function foo(A $bar, $x) { return $x; }