stratadox / identity-map
v0.5.1
2018-05-22 22:32 UTC
Requires
- php: >=7.2
Requires (Dev)
- fzaninotto/faker: ^1.7
- phpstan/phpstan: ^0.9.2
- phpunit/phpunit: ^7.1
- satooshi/php-coveralls: ^2.0
README
通过身份映射对象。
关于
包含已加载的对象。
主要用于防止唯一实体的重复加载,并作为已加载实体的注册表。
安装
使用 composer require stratadox/identity-map 安装
这是什么?
身份映射 是所有从数据源加载的实体的注册表。
客户端代码在执行昂贵的检索操作(如查询数据库或请求在线资源)之前可以咨询身份映射。
它如何工作?
它本质上是一个不可变的包含对象的映射的映射。
第一层映射类到该类已加载对象的映射。第二层从身份映射到实际对象。
此外,它还包含一个反向映射,可以快速将实例映射到其ID。
如何使用此工具?
创建映射
创建一个预先填充对象的映射
$map = IdentityMap::with([ 'id1' => $object1, 'id2' => $object2, ]);
或者从空白映射开始
$map = IdentityMap::startEmpty();
...之后用对象填充它
$map = $map->add('id3', $object3);
可以通过以下方式从映射中删除对象
$map = $map->remove(Foo::class, 'id3');
或者
$map = $map->removeThe($object);
咨询映射
检查请求的ID的实体是否已在映射中存在
if ($map->has(Foo::class, '1')) { ...
从映射中检索相应的对象
$object = $map->get(Foo::class, '1');
检查对象实例是否已添加
if ($map->hasThe($object)) { ...
检索映射中对象的ID
$id = $map->idOf($object);
防止不想要的类
当加载可能包含实体和值对象的一组对象时,在提供身份映射时可能希望忽略值对象。
可以通过包装身份映射来实现
$map = Whitelist::forThe(IdentityMap::startEmpty(), MyEntity::class);
在这种情况下,添加不是 MyEntity 类的对象将被静默忽略。
可以通过指定更多类来白名单多个实体
$map = Whitelist::forThe(IdentityMap::startEmpty(), Foo::class, Bar::class);
或使用此快捷方式
$map = Whitelist::the(Foo::class, Bar::class);