c01l/phpdecorator-memo
使用Python风格的装饰器模式为PHP方法提供记忆化。
1.0.0
2021-12-30 01:53 UTC
Requires
- php: ^8.0
- c01l/phpdecorator: ^1.2
Requires (Dev)
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: 3.*
This package is not auto-updated.
Last update: 2024-09-20 14:00:58 UTC
README
phpdecorator库扩展可以用来根据参数在内存中存储返回值。
此库使用函数的参数来构建缓存键以缓存函数调用结果。
如何使用它?
- 将
Memo
属性添加到函数中。 - 指定如何构建缓存键。
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; }