16
16
use ReflectionFunctionAbstract ;
17
17
use ReflectionMethod ;
18
18
use RuntimeException ;
19
+ use Toolkit \Stdlib \Helper \PhpHelper ;
19
20
use Traversable ;
20
21
use function base64_decode ;
21
22
use function base64_encode ;
23
+ use function basename ;
24
+ use function dirname ;
25
+ use function gettype ;
22
26
use function gzcompress ;
23
27
use function gzuncompress ;
24
28
use function is_array ;
32
36
use function serialize ;
33
37
use function spl_object_hash ;
34
38
use function sprintf ;
39
+ use function str_replace ;
40
+ use function strpos ;
35
41
use function ucfirst ;
36
42
use function unserialize ;
37
43
@@ -49,7 +55,7 @@ class ObjectHelper
49
55
* - 会先尝试用 setter 方法设置属性
50
56
* - 再尝试直接设置属性
51
57
*
52
- * @param mixed $object An object instance
58
+ * @param object| mixed $object An object instance
53
59
* @param array $options
54
60
*
55
61
* @return mixed
@@ -92,14 +98,30 @@ public static function configure($object, array $options): void
92
98
/**
93
99
* 给对象设置属性值
94
100
*
95
- * @param $object
101
+ * @param object|mixed $object
96
102
* @param array $options
97
103
*/
98
104
public static function setAttrs ($ object , array $ options ): void
99
105
{
100
106
self ::configure ($ object , $ options );
101
107
}
102
108
109
+ /**
110
+ * @param object|mixed $object
111
+ * @param array $data
112
+ *
113
+ * @throws ReflectionException
114
+ */
115
+ public static function mappingProps ($ object , array $ data ): void
116
+ {
117
+ // TODO
118
+ $ rftObj = PhpHelper::reflectClass ($ object );
119
+ foreach ($ rftObj ->getProperties () as $ rftProp ) {
120
+ // TODO
121
+ // $typeName = $rftProp->getType()
122
+ }
123
+ }
124
+
103
125
/**
104
126
* 定义一个用来序列化数据的函数
105
127
*
@@ -160,7 +182,7 @@ public static function toArray($data, bool $recursive = false)
160
182
}
161
183
162
184
/**
163
- * @param object $object
185
+ * @param object|mixed $object
164
186
*
165
187
* @return bool
166
188
*/
@@ -171,11 +193,11 @@ public static function isArrayable($object): bool
171
193
172
194
/**
173
195
* @param mixed $object
174
- * @param bool $unique
196
+ * @param bool $unique
175
197
*
176
198
* @return string
177
199
*/
178
- public static function hash ($ object , $ unique = true ): string
200
+ public static function hash ($ object , bool $ unique = true ): string
179
201
{
180
202
if (is_object ($ object )) {
181
203
$ hash = spl_object_hash ($ object );
@@ -192,8 +214,7 @@ public static function hash($object, $unique = true): string
192
214
}
193
215
194
216
/**
195
- * @from https://github.com/ventoviro/windwalker
196
- * Build an array of constructor parameters.
217
+ * Build an array of class method parameters.
197
218
*
198
219
* @param ReflectionMethod $method Method for which to build the argument array.
199
220
* @param array $provideArgs Manual provide params map.
@@ -245,6 +266,8 @@ public static function getMethodArgs(ReflectionMethod $method, array $provideArg
245
266
}
246
267
247
268
/**
269
+ * Build an array of class method parameters.
270
+ *
248
271
* @param ReflectionFunctionAbstract $rftFunc
249
272
* @param array $provideArgs
250
273
*
@@ -264,9 +287,9 @@ public static function buildReflectCallArgs(ReflectionFunctionAbstract $rftFunc,
264
287
continue ;
265
288
}
266
289
267
- // filling by param name
290
+ // filling by param name and type is same.
268
291
$ name = $ param ->getName ();
269
- if (isset ($ provideArgs [$ name ])) {
292
+ if (isset ($ provideArgs [$ name ]) && $ typeName === gettype ( $ provideArgs [ $ name ]) ) {
270
293
$ funcArgs [] = $ provideArgs [$ name ];
271
294
continue ;
272
295
}
@@ -325,6 +348,7 @@ public static function create(string $class)
325
348
*/
326
349
public static function createByArray ($ config )
327
350
{
351
+ // is class name.
328
352
if (is_string ($ config )) {
329
353
return new $ config ;
330
354
}
@@ -341,4 +365,34 @@ public static function createByArray($config)
341
365
342
366
return null ;
343
367
}
368
+
369
+
370
+ /**
371
+ * Get class namespace
372
+ *
373
+ * @param string $fullClass
374
+ *
375
+ * @return string
376
+ */
377
+ public static function spaceName (string $ fullClass ): string
378
+ {
379
+ $ fullClass = str_replace ('\\' , '/ ' , $ fullClass );
380
+
381
+ return strpos ($ fullClass , '/ ' ) ? dirname ($ fullClass ) : '' ;
382
+ }
383
+
384
+ /**
385
+ * Get class name without namespace.
386
+ *
387
+ * @param null|string $fullClass
388
+ *
389
+ * @return string
390
+ */
391
+ public static function className (string $ fullClass ): string
392
+ {
393
+ $ fullClass = str_replace ('\\' , '/ ' , $ fullClass );
394
+
395
+ return basename ($ fullClass );
396
+ }
397
+
344
398
}
0 commit comments