11
11
12
12
class File implements Storage
13
13
{
14
- /**
15
- * cached.
16
- *
17
- * @var array
18
- */
19
- public static $ cached = [
20
- 'zip3 ' => null ,
21
- 'zip5 ' => null ,
22
- ];
14
+ public static $ cached = ['zip3 ' => null , 'zip5 ' => null ];
23
15
24
- /**
25
- * $path.
26
- *
27
- * @var string
28
- */
16
+ /** @var string */
29
17
public $ path ;
30
18
31
- /**
32
- * $suffix.
33
- *
34
- * @var string
35
- */
36
19
public $ suffix = '.rules ' ;
37
20
38
- /**
39
- * __construct.
40
- *
41
- * @param string $path
42
- */
43
- public function __construct ($ path = null )
21
+ public function __construct (?string $ path = null )
44
22
{
45
- $ this ->path = ($ path ?: dirname (dirname ( __DIR__ ) ).'/resources/data ' ).'/ ' ;
23
+ $ this ->path = ($ path ?: dirname (__DIR__ , 2 ).'/resources/data ' ).'/ ' ;
46
24
}
47
25
48
- /**
49
- * zip3.
50
- *
51
- * @return JString
52
- */
53
- public function zip3 (Address $ address )
26
+ public function zip3 (Address $ address ): ?string
54
27
{
55
28
$ this ->restore ('zip3 ' );
56
29
57
30
foreach ([2 , 1 ] as $ value ) {
58
31
$ flat = $ address ->flat ($ value );
59
32
if (isset (self ::$ cached ['zip3 ' ][$ flat ])) {
60
- $ zip3 = self ::$ cached ['zip3 ' ][$ flat ];
61
-
62
- return $ zip3 ;
33
+ return self ::$ cached ['zip3 ' ][$ flat ];
63
34
}
64
35
}
65
36
66
37
return null ;
67
38
}
68
39
69
- /**
70
- * load.
71
- *
72
- * @param string $source
73
- * @return $this
74
- */
75
- public function load ($ source )
40
+ public function load (string $ source ): Storage
76
41
{
77
42
$ zip5 = [];
78
43
$ zip3 = [];
79
- $ this ->each ($ this ->prepareSource ($ source ), function ($ zipcode , $ county , $ district , $ rules ) use (&$ zip5 , &$ zip3 ) {
80
- $ zip5 [$ zipcode ] = $ this ->compress (array_map (function ($ rule ) {
81
- return new Rule ($ rule );
82
- }, $ rules ));
83
-
84
- if (isset ($ zip3 [$ county ]) === false ) {
85
- $ zip3 [$ county ] = substr ($ zipcode , 0 , 1 );
86
- }
44
+ $ this ->each ($ this ->prepareSource ($ source ),
45
+ function ($ zipcode , $ county , $ district , $ rules ) use (&$ zip5 , &$ zip3 ) {
46
+ $ zip5 [$ zipcode ] = $ this ->compress (
47
+ array_map (static function ($ rule ) {
48
+ return new Rule ($ rule );
49
+ }, $ rules )
50
+ );
51
+
52
+ if (isset ($ zip3 [$ county ]) === false ) {
53
+ $ zip3 [$ county ] = substr ($ zipcode , 0 , 1 );
54
+ }
87
55
88
- if (isset ($ zip3 [$ county .$ district ]) === false ) {
89
- $ zip3 [$ county .$ district ] = substr ($ zipcode , 0 , 3 );
90
- }
91
- });
56
+ if (isset ($ zip3 [$ county .$ district ]) === false ) {
57
+ $ zip3 [$ county .$ district ] = substr ($ zipcode , 0 , 3 );
58
+ }
59
+ });
92
60
93
61
$ this ->store ('zip3 ' , $ zip3 );
94
62
$ this ->store ('zip5 ' , $ zip5 );
95
63
96
64
return $ this ;
97
65
}
98
66
99
- /**
100
- * rules.
101
- *
102
- * @param string $zip3
103
- * @return JArray
104
- */
105
- public function rules ($ zip3 )
67
+ public function rules (string $ zip3 ): array
106
68
{
107
69
$ this ->restore ('zip5 ' );
108
70
109
71
return isset (self ::$ cached ['zip5 ' ][$ zip3 ]) === true
110
- ? new JArray ( $ this ->decompress (self ::$ cached ['zip5 ' ][$ zip3 ]) )
111
- : new JArray ([]) ;
72
+ ? $ this ->decompress (self ::$ cached ['zip5 ' ][$ zip3 ])
73
+ : [] ;
112
74
}
113
75
114
- /**
115
- * loadFile.
116
- *
117
- * @param string $file
118
- * @return $this
119
- */
120
- public function loadFile ($ file = null )
76
+ public function loadFile (?string $ file = null ): Storage
121
77
{
122
78
$ file = $ file ?: $ this ->path .'../Zip32_utf8_10501_1.csv ' ;
123
79
$ this ->load ($ this ->getSource ($ file ));
124
80
125
81
return $ this ;
126
82
}
127
83
128
- /**
129
- * flush.
130
- *
131
- * @return $this
132
- */
133
- public function flush ()
84
+ public function flush (): Storage
134
85
{
135
- static ::$ cached = [
136
- 'zip3 ' => null ,
137
- 'zip5 ' => null ,
138
- ];
86
+ static ::$ cached = ['zip3 ' => null , 'zip5 ' => null ];
139
87
140
88
return $ this ;
141
89
}
142
90
143
- /**
144
- * restore.
145
- *
146
- * @param string $filename
147
- * @return mixed
148
- */
149
- private function restore ($ filename )
91
+ private function restore (string $ filename ): void
150
92
{
151
93
if (self ::$ cached [$ filename ] !== null ) {
152
- return self :: $ cached [ $ filename ] ;
94
+ return ;
153
95
}
154
96
155
97
if (file_exists ($ this ->path .$ filename .$ this ->suffix ) === false ) {
156
- return false ;
98
+ return ;
157
99
}
158
100
159
- return self ::$ cached [$ filename ] = new JArray ($ this ->decompress (
101
+ self ::$ cached [$ filename ] = new JArray ($ this ->decompress (
160
102
file_get_contents ($ this ->path .$ filename .$ this ->suffix )
161
103
));
162
104
}
163
105
164
- /**
165
- * getSource.
166
- *
167
- * @param string $file
168
- * @return string
169
- */
170
- private function getSource ($ file )
106
+ private function getSource (string $ file ): string
171
107
{
172
108
$ extension = pathinfo ($ file , PATHINFO_EXTENSION );
173
109
@@ -211,13 +147,7 @@ private function prepareSource($source)
211
147
return $ results ;
212
148
}
213
149
214
- /**
215
- * each.
216
- *
217
- * @param array $ruleGroup
218
- * @param Closure $callback
219
- */
220
- private function each ($ ruleGroup , $ callback )
150
+ private function each (array $ ruleGroup , Closure $ callback ): void
221
151
{
222
152
foreach ($ ruleGroup as $ county => $ districts ) {
223
153
foreach ($ districts as $ district => $ addresses ) {
@@ -230,40 +160,22 @@ private function each($ruleGroup, $callback)
230
160
231
161
/**
232
162
* compress.
233
- *
234
- * @param array $array
235
- * @return string
236
163
*/
237
- private function compress ($ array )
164
+ private function compress (array $ array ): string
238
165
{
239
166
return gzcompress (serialize ($ array ));
240
167
}
241
168
242
169
/**
243
170
* decompress.
244
- *
245
- * @param string $compressed
246
- * @return array
247
171
*/
248
- private function decompress ($ compressed )
172
+ private function decompress (string $ compressed ): array
249
173
{
250
- return unserialize (gzuncompress ($ compressed ));
174
+ return unserialize (gzuncompress ($ compressed ), [ ' max_depth ' => 0 ] );
251
175
}
252
176
253
- /**
254
- * store.
255
- *
256
- * @param string $filename
257
- * @param JArray $data
258
- * @return $this
259
- */
260
- private function store ($ filename , $ data )
177
+ private function store (string $ filename , array $ data ): void
261
178
{
262
- file_put_contents (
263
- $ this ->path .$ filename .$ this ->suffix ,
264
- $ this ->compress ($ data )
265
- );
266
-
267
- return $ this ;
179
+ file_put_contents ($ this ->path .$ filename .$ this ->suffix , $ this ->compress ($ data ));
268
180
}
269
181
}
0 commit comments