-
Notifications
You must be signed in to change notification settings - Fork 0
/
IdentityMap.php
103 lines (92 loc) · 2.2 KB
/
IdentityMap.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
namespace TRW\ActiveRecord;
/**
* レコードオブジェクトをキャッシュするクラス.
*
* このクラスは\TRW\ActiveRecord\BaseRecordが内部で使用しているクラス。一般の開発者への使用を前提としていない
*
* @accsess private
*/
class IdentityMap {
/**
* レコードクラスのキャッシュ
* 次の構造をしている
* $map =
* [
* 'App\Model\User' =>[
* App\Model\User Object,
* :
* :
* ],
* 'App\Model\Profile' => [
* App\Model\Profile Object,
* :
* :
* ],
* :
* :
* ]
*
*/
private static $map;
/**
* 保持しているキャッシュを全て返す.
*
* @return array 保持しているキャッシュ
*/
public static function map(){
return self::$map;
}
/**
* 保持しているキャッシュを全てクリアする.
*
* @return void
*/
public static function clearAll(){
self::$map = [];
}
/**
* レコード毎に保持しているキャッシュ全てを返す.
*
* @return array|false レコードがキャッシュを保持していなければfalse
*/
public static function getAllRecord($recordName){
if(!empty(self::$map[$recordName])){
return self::$map[$recordName];
}else{
return false;
}
}
/**
* キャッシュをセットする.
*
* @param string $recordName レコードクラス名
* @param int $id レコードオブジェクトのid
* @param \TRW\ActiveRecord\BaseRecord $record レコードオブジェクト
*/
public static function set($recordName, $id, $record){
$records = [];
if(!empty(self::$map[$recordName])){
$records = self::$map[$recordName];
}
$resultRecords = [$id => $record] + $records;
self::$map[$recordName] = $resultRecords;
}
/**
* レコード毎に保持しているキャッシュを一件返す.
*
* @param string $recordName レコードクラス名
* @param int $id 取得したいキャッシュのid
* @return \TRW_ActiveRecord\BaseRecord|false レコードのキャッシュ 見つからなければfalse
*/
public static function get($recordName, $id){
if(!empty(self::$map[$recordName])){
if(!empty(self::$map[$recordName][$id])){
return self::$map[$recordName][$id];
}else{
return false;
}
}
return false;
}
}