h4kuna / memoize
为您的类提供内存缓存。
v0.1.7
2024-08-23 05:52 UTC
Requires
- php: >=8.0.0
- psr/simple-cache: ^3.0
Requires (Dev)
- phpstan/phpstan: ^1.9
- phpstan/phpstan-strict-rules: ^1.4
- phpunit/phpunit: ^11.2
This package is auto-updated.
Last update: 2024-09-23 06:01:08 UTC
README
这是一个特质,它为类提供内存缓存。这是缓存单个请求数据的一个抽象标准用例。以下是一个示例。
API简单,有一个名为 memoize 的方法,第一个参数是唯一的键字符串或数组,第二个参数是回调函数。这个特质清除类。
通过composer安装
$ composer require h4kuna/memoize
标准用例
<?php class Foo { private $dataFromDatabase; private $users = []; public function loadDataFromDatabase() { if ($this->dataFromDatabase === null) { $this->dataFromDatabase = $this->repository->fetchAnyData(); } return $this->dataFromDatabase; } public function loadDataFromDatabaseByUser($userId) { if (isset($this->users[$userId]) === false) { $this->users[$userId] = $this->repository->fetchUser($userId); } return $this->users[$userId]; } }
使用Memoize
<?php class Foo { use h4kuna\Memoize\Memoize; public function loadDataFromDatabase() { return $this->memoize(__METHOD__, function() { return $this->repository->fetchAnyData(); }); } public function loadDataFromDatabaseByUser($userId) { return $this->memoize([__METHOD__, $userId], function() use ($userId) { return $this->repository->fetchUser($userId); }); } }
静态用例
相似类可以用于静态类。
class Bar { use h4kuna\Memoize\MemoizeStatic public static function loadDataFromDatabaseByUser($userId) { return static::memoize([__METHOD__, $userId], function() use ($userId) { return User::fetchUser($userId); }); } }
同时使用两个特质
这种情况不太可能,所以名称相同。您可以通过别名来解决。
class Baz { use Memoize\Memoize, Memoize\MemoizeStatic { Memoize\Memoize::memoize insteadof Memoize\MemoizeStatic; Memoize\MemoizeStatic::memoize as memoizeStatic; } public function foo(): { return $this->memoize(); } public static function bar(): { return static::memoizeStatic(); } }
在测试中禁用Memoize
您可以在引导文件中禁用Memoize以用于测试。
use h4kuna\Memoize\Helper; Helper::bypassMemoize();