• R/O
  • SSH
  • HTTPS

jinrousiki: コミット


コミットメタ情報

リビジョン2147 (tree)
日時2018-11-17 21:56:44
作者umethyl

ログメッセージ

LoadManager: static で再設計

変更サマリ

差分

--- trunk/dev/test/data/vote_debug.php (revision 2146)
+++ trunk/dev/test/data/vote_debug.php (revision 2147)
@@ -1,5 +1,4 @@
11 <?php
2-//Text::p(Loader::$file, '◆Loader');
32 //foreach (DB::$ROOM as $name => $class) Text::p($class, "◆Room [{$name}]");
43 //foreach (DB::$ROOM->Stack() as $key => $data) Text::p($data, "◆Stack [{$key}]");
54 //Text::p(DB::$ROOM->Flag(), '◆Flag');
@@ -7,11 +6,15 @@
76 //Text::p(DB::$ROOM->game_option, '◆GameOption');
87 //Text::p(DB::$USER->GetRole(), '◆ROOM/Role');
98 //Text::v(DB::$USER->IsOpenCast(), '◆OpenCast');
10-//Text::p(RoleLoader::$file, '◆Role [file]');
119 //Text::p(array_keys(RoleLoader::$class), '◆Role [class]');
12-//foreach (RoleLoader::$class as $name => $class) Text::p($class, "◆Role [{$name}]");
1310 //JinrouLogger::Get()->Output();
1411
12+/* ライブラリロード情報 */
13+//Loader::OutputFile();
14+//OptionLoader::OutputFile();
15+//EventLoader::OutputFile();
16+//RoleLoader::OutputFile();
17+
1518 /* 役職判定情報 */
1619 //self::OutputDistinguishMage();
1720
--- trunk/include/controller/user_manager_class.php (revision 2146)
+++ trunk/include/controller/user_manager_class.php (revision 2147)
@@ -98,7 +98,7 @@
9898 DB::$ROOM->ParseOption(true);
9999
100100 //DB から現在のユーザ情報を取得 (ロック付き)
101- RQ::Load('Request', true);
101+ RQ::LoadRequest('Request', true);
102102 RQ::Set(RequestDataGame::ID, $room_no);
103103 RQ::Get('retrieve_type', 'entry_user');
104104 DB::LoadUser();
--- trunk/include/event/event_class.php (revision 2146)
+++ trunk/include/event/event_class.php (revision 2147)
@@ -1,30 +1,10 @@
11 <?php
22 //-- イベントローダー --//
3-class EventLoader {
3+class EventLoader extends LoadManager {
44 const PATH = '%s/event/%s.php';
55 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 = [];
288 }
299
3010 //-- イベントマネージャ --//
--- trunk/include/loader_class.php (revision 2146)
+++ trunk/include/loader_class.php (revision 2147)
@@ -1,64 +1,108 @@
11 <?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+
418 //-- ファイル --//
519 //ファイルロード
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];
1623 }
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;
1735 }
1836
1937 //ファイル登録
20- public static function RegisterFile(array &$list, $name, $file) {
38+ final public static function RegisterFile($name) {
39+ $file = static::GetPath($name);
2140 if (true == require_once($file)) {
22- $list[] = $name;
41+ static::$file[] = $name;
2342 //printf('◆Register: %s: %s<br>', $name, $file);
2443 return true;
2544 } else {
26- printf('Error: Load Failed: %s: %s<br>', $name, $file);
27- return false;
45+ throw new RuntimeException("Load file failed: {$name}");
2846 }
2947 }
3048
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+
3159 //-- クラス --//
3260 //クラスロード
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];
4064 }
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;
4176 }
4277
4378 //クラス登録
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();
4782 //printf('◆Class: %s<br>', $class_name);
4883 return true;
4984 }
5085
5186 //クラスのロード済み判定
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]);
5489 }
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+ }
5599 }
56100
57101 //-- ライブラリローダークラス --//
58-class Loader {
102+final class Loader extends LoadManager {
59103 const PATH = '%s/%s.php';
60- private static $file = []; //ロード済みファイル
61- private static $class = []; //ロード済みクラス
104+ protected static $file = []; //ロード済みファイル
105+ protected static $class = []; //ロード済みクラス
62106
63107 //初期化処理
64108 public static function Initialize() {
@@ -102,56 +146,22 @@
102146 }
103147 }
104148
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]);
109153 }
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- }
121154 }
122155
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-
141156 //リクエストクラスロード
142157 public static function LoadRequest($class = 'Request', $game = false) {
143158 if ($game) self::LoadFile('game_config');
144159 self::LoadFile('request_class');
145- return RQ::Load($class);
160+ return RQ::LoadRequest($class);
146161 }
147162
148- //ファイルロード済み判定
149- public static function IsLoaded($name) {
150- return in_array($name, self::$file);
151- }
152-
153163 //ファイルパス取得
154- private static function GetPath($name) {
164+ protected static function GetPath($name) {
155165 if (true === isset(LoaderData::$path[$name])) {
156166 $type = LoaderData::$path[$name];
157167 } else {
@@ -205,13 +215,6 @@
205215
206216 return sprintf(self::PATH, $path, $name);
207217 }
208-
209- //依存解決処理
210- private static function LoadDependence($name) {
211- if (true === isset(LoaderData::$depend[$name])) {
212- self::LoadFile(LoaderData::$depend[$name]);
213- }
214- }
215218 }
216219
217220 //-- ライブラリデータクラス --//
@@ -220,7 +223,7 @@
220223 確実に読み込まれているデータを入れる必要はない。
221224 逆にコード上必須ではないが常にセットで使われるデータを入れると良い。
222225 */
223-class LoaderData {
226+final class LoaderData {
224227 //依存ファイル情報 (読み込むデータ => 依存するファイル)
225228 public static $depend = [
226229 //class
--- trunk/include/option/option_class.php (revision 2146)
+++ trunk/include/option/option_class.php (revision 2147)
@@ -1,30 +1,10 @@
11 <?php
22 //-- オプションローダー --//
3-class OptionLoader {
3+class OptionLoader extends LoadManager {
44 const PATH = '%s/option/%s.php';
55 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 = [];
288 }
299
3010 //-- オプションマネージャ --//
--- trunk/include/request/request_class.php (revision 2146)
+++ trunk/include/request/request_class.php (revision 2147)
@@ -1,9 +1,9 @@
11 <?php
22 //-- 引数管理クラス --//
3-class RQ {
3+class RQ extends LoadManager {
44 const PATH = '%s/request/%s.php';
55 const CLASS_PREFIX = 'Request_';
6- private static $file = [];
6+ protected static $file = [];
77 private static $instance = null; //Request クラス
88
99 //Request クラスの初期化
@@ -12,7 +12,7 @@
1212 }
1313
1414 //Request クラスのロード
15- public static function Load($name = 'Request', $force = false) {
15+ public static function LoadRequest($name = 'Request', $force = false) {
1616 if ($force || is_null(self::$instance)) {
1717 if ($name != 'Request' && self::LoadFile($name)) {
1818 $class = self::CLASS_PREFIX . $name;
@@ -23,11 +23,6 @@
2323 }
2424 }
2525
26- //ファイルロード
27- public static function LoadFile($name) {
28- return LoadManager::LoadFile(self::$file, $name, self::GetPath($name));
29- }
30-
3126 //インスタンス取得
3227 public static function Get() {
3328 return self::$instance;
@@ -64,11 +59,6 @@
6459 return self::Get()->ToArray();
6560 }
6661
67- //ファイルパス取得
68- private static function GetPath($name) {
69- return sprintf(self::PATH, JINROU_INC, $name);
70- }
71-
7262 //デバッグ用
7363 public static function p($data = null, $name = null) {
7464 Text::p(is_null($data) ? self::Get() : self::Get()->$data, $name);
--- trunk/include/role/role_class.php (revision 2146)
+++ trunk/include/role/role_class.php (revision 2147)
@@ -1,23 +1,13 @@
11 <?php
22 //-- 役職ローダー --//
3-class RoleLoader {
3+class RoleLoader extends LoadManager {
44 const PATH = '%s/role/%s.php';
55 const CLASS_PREFIX = 'Role_';
66 const MAIN = 'main_role';
7- private static $file = array(); //ロード済みファイル
8- private static $class = array(); //ロード済みクラス
7+ protected static $file = array(); //ロード済みファイル
8+ protected static $class = array(); //ロード済みクラス
99 private static $actor; //対象ユーザ
1010
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-
2111 //個別クラスロード (Mixin 用)
2212 public static function LoadMix($name) {
2313 if (! self::LoadFile($name)) return null;
@@ -67,16 +57,6 @@
6757 }
6858
6959 //-- 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-
8060 //役職リスト取得
8161 private static function GetList($type) {
8262 return $type == self::MAIN ? array(self::$actor->GetMainRole(true)) : RoleFilterData::$$type;
@@ -86,8 +66,8 @@
8666 private static function GetFilter(array $list) {
8767 $stack = array();
8868 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];
9171 }
9272 }
9373 return $stack;
旧リポジトリブラウザで表示