LoadManager: static で再設計
@@ -1,5 +1,4 @@ | ||
1 | 1 | <?php |
2 | -//Text::p(Loader::$file, '◆Loader'); | |
3 | 2 | //foreach (DB::$ROOM as $name => $class) Text::p($class, "◆Room [{$name}]"); |
4 | 3 | //foreach (DB::$ROOM->Stack() as $key => $data) Text::p($data, "◆Stack [{$key}]"); |
5 | 4 | //Text::p(DB::$ROOM->Flag(), '◆Flag'); |
@@ -7,11 +6,15 @@ | ||
7 | 6 | //Text::p(DB::$ROOM->game_option, '◆GameOption'); |
8 | 7 | //Text::p(DB::$USER->GetRole(), '◆ROOM/Role'); |
9 | 8 | //Text::v(DB::$USER->IsOpenCast(), '◆OpenCast'); |
10 | -//Text::p(RoleLoader::$file, '◆Role [file]'); | |
11 | 9 | //Text::p(array_keys(RoleLoader::$class), '◆Role [class]'); |
12 | -//foreach (RoleLoader::$class as $name => $class) Text::p($class, "◆Role [{$name}]"); | |
13 | 10 | //JinrouLogger::Get()->Output(); |
14 | 11 | |
12 | +/* ライブラリロード情報 */ | |
13 | +//Loader::OutputFile(); | |
14 | +//OptionLoader::OutputFile(); | |
15 | +//EventLoader::OutputFile(); | |
16 | +//RoleLoader::OutputFile(); | |
17 | + | |
15 | 18 | /* 役職判定情報 */ |
16 | 19 | //self::OutputDistinguishMage(); |
17 | 20 |
@@ -98,7 +98,7 @@ | ||
98 | 98 | DB::$ROOM->ParseOption(true); |
99 | 99 | |
100 | 100 | //DB から現在のユーザ情報を取得 (ロック付き) |
101 | - RQ::Load('Request', true); | |
101 | + RQ::LoadRequest('Request', true); | |
102 | 102 | RQ::Set(RequestDataGame::ID, $room_no); |
103 | 103 | RQ::Get('retrieve_type', 'entry_user'); |
104 | 104 | DB::LoadUser(); |
@@ -1,30 +1,10 @@ | ||
1 | 1 | <?php |
2 | 2 | //-- イベントローダー --// |
3 | -class EventLoader { | |
3 | +class EventLoader extends LoadManager { | |
4 | 4 | const PATH = '%s/event/%s.php'; |
5 | 5 | const CLASS_PREFIX = 'Event_'; |
6 | - private static $file = []; | |
7 | - private static $class = []; | |
8 | - | |
9 | - //イベントロード | |
10 | - public static function Load($name) { | |
11 | - return (self::LoadFile($name) && self::LoadClass($name)) ? self::$class[$name] : null; | |
12 | - } | |
13 | - | |
14 | - //ファイルロード | |
15 | - public static function LoadFile($name) { | |
16 | - return LoadManager::LoadFile(self::$file, $name, self::GetPath($name)); | |
17 | - } | |
18 | - | |
19 | - //クラスロード | |
20 | - private static function LoadClass($name) { | |
21 | - return LoadManager::LoadClass(self::$class, $name, self::CLASS_PREFIX); | |
22 | - } | |
23 | - | |
24 | - //ファイルパス取得 | |
25 | - private static function GetPath($name) { | |
26 | - return sprintf(self::PATH, JINROU_INC, $name); | |
27 | - } | |
6 | + protected static $file = []; | |
7 | + protected static $class = []; | |
28 | 8 | } |
29 | 9 | |
30 | 10 | //-- イベントマネージャ --// |
@@ -1,64 +1,108 @@ | ||
1 | 1 | <?php |
2 | -//-- ライブラリロードマネージャ --// | |
3 | -class LoadManager { | |
2 | +//-- ライブラリローダー基底クラス --// | |
3 | +abstract class LoadManager { | |
4 | + const PATH = ''; | |
5 | + const CLASS_PREFIX = ''; | |
6 | + protected static $file = []; | |
7 | + protected static $class = []; | |
8 | + | |
9 | + //-- 共通 --// | |
10 | + //ライブラリロード | |
11 | + final public static function Load($name) { | |
12 | + return (self::LoadFile($name) && self::LoadClass($name)) ? static::$class[$name] : null; | |
13 | + } | |
14 | + | |
15 | + //依存解決処理 | |
16 | + protected static function LoadDependence($name) {} | |
17 | + | |
4 | 18 | //-- ファイル --// |
5 | 19 | //ファイルロード |
6 | - public static function LoadFile(array &$list, $name, $file) { | |
7 | - if (is_null($name)) { | |
8 | - return false; | |
9 | - } elseif (in_array($name, $list)) { | |
10 | - return true; | |
11 | - } elseif (file_exists($file)) { | |
12 | - return self::RegisterFile($list, $name, $file); | |
13 | - } else { | |
14 | - printf('Error: File Not Found: %s: %s<br>', $name, $file); | |
15 | - return false; | |
20 | + final public static function LoadFile(...$name_list) { | |
21 | + if (true === is_array($name_list[0])) { | |
22 | + $name_list = $name_list[0]; | |
16 | 23 | } |
24 | + | |
25 | + foreach ($name_list as $name) { | |
26 | + //printf('◆LoadFile: %s: %s: <br>', static::CLASS_PREFIX, $name); | |
27 | + if (true === is_null($name)) { | |
28 | + throw new InvalidArgumentException('Argument is NULL'); | |
29 | + } elseif (false === self::IsLoaded($name)) { | |
30 | + static::LoadDependence($name); | |
31 | + self::RegisterFile($name); | |
32 | + } | |
33 | + } | |
34 | + return true; | |
17 | 35 | } |
18 | 36 | |
19 | 37 | //ファイル登録 |
20 | - public static function RegisterFile(array &$list, $name, $file) { | |
38 | + final public static function RegisterFile($name) { | |
39 | + $file = static::GetPath($name); | |
21 | 40 | if (true == require_once($file)) { |
22 | - $list[] = $name; | |
41 | + static::$file[] = $name; | |
23 | 42 | //printf('◆Register: %s: %s<br>', $name, $file); |
24 | 43 | return true; |
25 | 44 | } else { |
26 | - printf('Error: Load Failed: %s: %s<br>', $name, $file); | |
27 | - return false; | |
45 | + throw new RuntimeException("Load file failed: {$name}"); | |
28 | 46 | } |
29 | 47 | } |
30 | 48 | |
49 | + //ファイルロード済み判定 | |
50 | + final public static function IsLoaded($name) { | |
51 | + return in_array($name, static::$file); | |
52 | + } | |
53 | + | |
54 | + //ファイルパス取得 | |
55 | + protected static function GetPath($name) { | |
56 | + return sprintf(static::PATH, JINROU_INC, $name); | |
57 | + } | |
58 | + | |
31 | 59 | //-- クラス --// |
32 | 60 | //クラスロード |
33 | - public static function LoadClass(array &$list, $name, $prefix = '') { | |
34 | - if (is_null($name)) { | |
35 | - return false; | |
36 | - } elseif (self::IsClass($list, $name)) { | |
37 | - return true; | |
38 | - } else { | |
39 | - return self::RegisterClass($list, $name, $prefix); | |
61 | + final public static function LoadClass(...$name_list) { | |
62 | + if (true === is_array($name_list[0])) { | |
63 | + $name_list = $name_list[0]; | |
40 | 64 | } |
65 | + | |
66 | + foreach ($name_list as $name) { | |
67 | + //printf('◆LoadClass: %s<br>', $name); | |
68 | + if (true === is_null($name)) { | |
69 | + throw new InvalidArgumentException("Argument is NULL: {$name}"); | |
70 | + } elseif (false === self::IsClass($name)) { | |
71 | + self::LoadDependence($name); | |
72 | + self::RegisterClass($name); | |
73 | + } | |
74 | + } | |
75 | + return true; | |
41 | 76 | } |
42 | 77 | |
43 | 78 | //クラス登録 |
44 | - public static function RegisterClass(array &$list, $name, $prefix = '') { | |
45 | - $class_name = $prefix . $name; | |
46 | - $list[$name] = new $class_name(); | |
79 | + final public static function RegisterClass($name) { | |
80 | + $class_name = static::CLASS_PREFIX . $name; | |
81 | + static::$class[$name] = new $class_name(); | |
47 | 82 | //printf('◆Class: %s<br>', $class_name); |
48 | 83 | return true; |
49 | 84 | } |
50 | 85 | |
51 | 86 | //クラスのロード済み判定 |
52 | - public static function IsClass(array $list, $name) { | |
53 | - return isset($list[$name]) && is_object($list[$name]); | |
87 | + final public static function IsClass($name) { | |
88 | + return isset(static::$class[$name]) && is_object(static::$class[$name]); | |
54 | 89 | } |
90 | + | |
91 | + //-- デバッグ用 --// | |
92 | + final public static function OutputFile() { | |
93 | + Text::p(static::$file, '◆File: ' . static::CLASS_PREFIX); | |
94 | + } | |
95 | + | |
96 | + final public static function OutputClass() { | |
97 | + Text::p(static::$class, '◆Class: ' . static::CLASS_PREFIX); | |
98 | + } | |
55 | 99 | } |
56 | 100 | |
57 | 101 | //-- ライブラリローダークラス --// |
58 | -class Loader { | |
102 | +final class Loader extends LoadManager { | |
59 | 103 | const PATH = '%s/%s.php'; |
60 | - private static $file = []; //ロード済みファイル | |
61 | - private static $class = []; //ロード済みクラス | |
104 | + protected static $file = []; //ロード済みファイル | |
105 | + protected static $class = []; //ロード済みクラス | |
62 | 106 | |
63 | 107 | //初期化処理 |
64 | 108 | public static function Initialize() { |
@@ -102,56 +146,22 @@ | ||
102 | 146 | } |
103 | 147 | } |
104 | 148 | |
105 | - //ファイルロード | |
106 | - public static function LoadFile(...$name_list) { | |
107 | - if (true === is_array($name_list[0])) { | |
108 | - $name_list = $name_list[0]; | |
149 | + //依存解決処理 | |
150 | + protected static function LoadDependence($name) { | |
151 | + if (true === isset(LoaderData::$depend[$name])) { | |
152 | + self::LoadFile(LoaderData::$depend[$name]); | |
109 | 153 | } |
110 | - | |
111 | - foreach ($name_list as $name) { | |
112 | - if (true === is_null($name)) { | |
113 | - throw new InvalidArgumentException("Argument is NULL: {$name}"); | |
114 | - } elseif (false === self::IsLoaded($name)) { | |
115 | - self::LoadDependence($name); | |
116 | - if (false === LoadManager::RegisterFile(self::$file, $name, self::GetPath($name))) { | |
117 | - throw new RuntimeException("Load file failed: {$name}"); | |
118 | - } | |
119 | - } | |
120 | - } | |
121 | 154 | } |
122 | 155 | |
123 | - //クラスロード | |
124 | - public static function LoadClass(...$name_list) { | |
125 | - if (true === is_array($name_list[0])) { | |
126 | - $name_list = $name_list[0]; | |
127 | - } | |
128 | - | |
129 | - foreach ($name_list as $name) { | |
130 | - if (true === is_null($name)) { | |
131 | - throw new InvalidArgumentException("Argument is NULL: {$name}"); | |
132 | - } elseif (false === LoadManager::IsClass(self::$class, $name)) { | |
133 | - self::LoadDependence($name); | |
134 | - if (false === LoadManager::RegisterClass(self::$class, $name)) { | |
135 | - throw new RuntimeException("Load class failed: {$name}"); | |
136 | - } | |
137 | - } | |
138 | - } | |
139 | - } | |
140 | - | |
141 | 156 | //リクエストクラスロード |
142 | 157 | public static function LoadRequest($class = 'Request', $game = false) { |
143 | 158 | if ($game) self::LoadFile('game_config'); |
144 | 159 | self::LoadFile('request_class'); |
145 | - return RQ::Load($class); | |
160 | + return RQ::LoadRequest($class); | |
146 | 161 | } |
147 | 162 | |
148 | - //ファイルロード済み判定 | |
149 | - public static function IsLoaded($name) { | |
150 | - return in_array($name, self::$file); | |
151 | - } | |
152 | - | |
153 | 163 | //ファイルパス取得 |
154 | - private static function GetPath($name) { | |
164 | + protected static function GetPath($name) { | |
155 | 165 | if (true === isset(LoaderData::$path[$name])) { |
156 | 166 | $type = LoaderData::$path[$name]; |
157 | 167 | } else { |
@@ -205,13 +215,6 @@ | ||
205 | 215 | |
206 | 216 | return sprintf(self::PATH, $path, $name); |
207 | 217 | } |
208 | - | |
209 | - //依存解決処理 | |
210 | - private static function LoadDependence($name) { | |
211 | - if (true === isset(LoaderData::$depend[$name])) { | |
212 | - self::LoadFile(LoaderData::$depend[$name]); | |
213 | - } | |
214 | - } | |
215 | 218 | } |
216 | 219 | |
217 | 220 | //-- ライブラリデータクラス --// |
@@ -220,7 +223,7 @@ | ||
220 | 223 | 確実に読み込まれているデータを入れる必要はない。 |
221 | 224 | 逆にコード上必須ではないが常にセットで使われるデータを入れると良い。 |
222 | 225 | */ |
223 | -class LoaderData { | |
226 | +final class LoaderData { | |
224 | 227 | //依存ファイル情報 (読み込むデータ => 依存するファイル) |
225 | 228 | public static $depend = [ |
226 | 229 | //class |
@@ -1,30 +1,10 @@ | ||
1 | 1 | <?php |
2 | 2 | //-- オプションローダー --// |
3 | -class OptionLoader { | |
3 | +class OptionLoader extends LoadManager { | |
4 | 4 | const PATH = '%s/option/%s.php'; |
5 | 5 | const CLASS_PREFIX = 'Option_'; |
6 | - private static $file = []; | |
7 | - private static $class = []; | |
8 | - | |
9 | - //オプションロード | |
10 | - public static function Load($name) { | |
11 | - return (self::LoadFile($name) && self::LoadClass($name)) ? self::$class[$name] : null; | |
12 | - } | |
13 | - | |
14 | - //ファイルロード | |
15 | - public static function LoadFile($name) { | |
16 | - return LoadManager::LoadFile(self::$file, $name, self::GetPath($name)); | |
17 | - } | |
18 | - | |
19 | - //クラスロード | |
20 | - private static function LoadClass($name) { | |
21 | - return LoadManager::LoadClass(self::$class, $name, self::CLASS_PREFIX); | |
22 | - } | |
23 | - | |
24 | - //ファイルパス取得 | |
25 | - private static function GetPath($name) { | |
26 | - return sprintf(self::PATH, JINROU_INC, $name); | |
27 | - } | |
6 | + protected static $file = []; | |
7 | + protected static $class = []; | |
28 | 8 | } |
29 | 9 | |
30 | 10 | //-- オプションマネージャ --// |
@@ -1,9 +1,9 @@ | ||
1 | 1 | <?php |
2 | 2 | //-- 引数管理クラス --// |
3 | -class RQ { | |
3 | +class RQ extends LoadManager { | |
4 | 4 | const PATH = '%s/request/%s.php'; |
5 | 5 | const CLASS_PREFIX = 'Request_'; |
6 | - private static $file = []; | |
6 | + protected static $file = []; | |
7 | 7 | private static $instance = null; //Request クラス |
8 | 8 | |
9 | 9 | //Request クラスの初期化 |
@@ -12,7 +12,7 @@ | ||
12 | 12 | } |
13 | 13 | |
14 | 14 | //Request クラスのロード |
15 | - public static function Load($name = 'Request', $force = false) { | |
15 | + public static function LoadRequest($name = 'Request', $force = false) { | |
16 | 16 | if ($force || is_null(self::$instance)) { |
17 | 17 | if ($name != 'Request' && self::LoadFile($name)) { |
18 | 18 | $class = self::CLASS_PREFIX . $name; |
@@ -23,11 +23,6 @@ | ||
23 | 23 | } |
24 | 24 | } |
25 | 25 | |
26 | - //ファイルロード | |
27 | - public static function LoadFile($name) { | |
28 | - return LoadManager::LoadFile(self::$file, $name, self::GetPath($name)); | |
29 | - } | |
30 | - | |
31 | 26 | //インスタンス取得 |
32 | 27 | public static function Get() { |
33 | 28 | return self::$instance; |
@@ -64,11 +59,6 @@ | ||
64 | 59 | return self::Get()->ToArray(); |
65 | 60 | } |
66 | 61 | |
67 | - //ファイルパス取得 | |
68 | - private static function GetPath($name) { | |
69 | - return sprintf(self::PATH, JINROU_INC, $name); | |
70 | - } | |
71 | - | |
72 | 62 | //デバッグ用 |
73 | 63 | public static function p($data = null, $name = null) { |
74 | 64 | Text::p(is_null($data) ? self::Get() : self::Get()->$data, $name); |
@@ -1,23 +1,13 @@ | ||
1 | 1 | <?php |
2 | 2 | //-- 役職ローダー --// |
3 | -class RoleLoader { | |
3 | +class RoleLoader extends LoadManager { | |
4 | 4 | const PATH = '%s/role/%s.php'; |
5 | 5 | const CLASS_PREFIX = 'Role_'; |
6 | 6 | const MAIN = 'main_role'; |
7 | - private static $file = array(); //ロード済みファイル | |
8 | - private static $class = array(); //ロード済みクラス | |
7 | + protected static $file = array(); //ロード済みファイル | |
8 | + protected static $class = array(); //ロード済みクラス | |
9 | 9 | private static $actor; //対象ユーザ |
10 | 10 | |
11 | - //個別クラスロード | |
12 | - public static function Load($name) { | |
13 | - return (self::LoadFile($name) && self::LoadClass($name)) ? self::$class[$name] : null; | |
14 | - } | |
15 | - | |
16 | - //ファイルロード | |
17 | - public static function LoadFile($name) { | |
18 | - return LoadManager::LoadFile(self::$file, $name, self::GetPath($name)); | |
19 | - } | |
20 | - | |
21 | 11 | //個別クラスロード (Mixin 用) |
22 | 12 | public static function LoadMix($name) { |
23 | 13 | if (! self::LoadFile($name)) return null; |
@@ -67,16 +57,6 @@ | ||
67 | 57 | } |
68 | 58 | |
69 | 59 | //-- private メソッド --// |
70 | - //クラスロード | |
71 | - private static function LoadClass($name) { | |
72 | - return LoadManager::LoadClass(self::$class, $name, self::CLASS_PREFIX); | |
73 | - } | |
74 | - | |
75 | - //ファイルパス取得 | |
76 | - private static function GetPath($name) { | |
77 | - return sprintf(self::PATH, JINROU_INC, $name); | |
78 | - } | |
79 | - | |
80 | 60 | //役職リスト取得 |
81 | 61 | private static function GetList($type) { |
82 | 62 | return $type == self::MAIN ? array(self::$actor->GetMainRole(true)) : RoleFilterData::$$type; |
@@ -86,8 +66,8 @@ | ||
86 | 66 | private static function GetFilter(array $list) { |
87 | 67 | $stack = array(); |
88 | 68 | foreach ($list as $name) { //順番依存があるので配列関数を使わないで処理する |
89 | - if (LoadManager::IsClass(self::$class, $name)) { | |
90 | - $stack[] = self::$class[$name]; | |
69 | + if (self::IsClass($name)) { | |
70 | + $stack[] = static::$class[$name]; | |
91 | 71 | } |
92 | 72 | } |
93 | 73 | return $stack; |