h4kuna/memoize

为您的类提供内存缓存。

维护者

详细信息

github.com/h4kuna/memoize

源代码

问题

安装次数: 56,885

依赖: 4

建议者: 0

安全: 0

星标: 4

关注者: 3

分支: 0

开放问题: 0

类型:工具

v0.1.7 2024-08-23 05:52 UTC

This package is auto-updated.

Last update: 2024-09-23 06:01:08 UTC


README

Downloads this Month Latest stable

这是一个特质,它为类提供内存缓存。这是缓存单个请求数据的一个抽象标准用例。以下是一个示例。

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();