13
13
use Generator ;
14
14
use ReflectionClass ;
15
15
use ReflectionException ;
16
+ use ReflectionMethod ;
16
17
use RuntimeException ;
17
18
use Toolkit \Stdlib \Obj \ObjectHelper ;
18
19
use function array_sum ;
19
20
use function explode ;
20
21
use function fopen ;
21
22
use function ftok ;
22
23
use function function_exists ;
24
+ use function get_class ;
23
25
use function is_array ;
24
26
use function is_callable ;
25
27
use function is_object ;
@@ -53,18 +55,44 @@ class PhpHelper
53
55
private static $ reflects = [];
54
56
55
57
/**
56
- * @param string $class
58
+ * @var ReflectionMethod[]
59
+ */
60
+ private static $ reflectMths = [];
61
+
62
+ /**
63
+ * @param string|object $classOrObj
57
64
*
58
65
* @return ReflectionClass
59
66
* @throws ReflectionException
60
67
*/
61
- public static function reflectClass (string $ class ): ReflectionClass
68
+ public static function reflectClass ($ classOrObj ): ReflectionClass
69
+ {
70
+ $ id = is_string ($ classOrObj ) ? $ classOrObj : get_class ($ classOrObj );
71
+
72
+ if (!isset (self ::$ reflects [$ id ])) {
73
+ self ::$ reflects [$ id ] = new ReflectionClass ($ classOrObj );
74
+ }
75
+
76
+ return self ::$ reflects [$ id ];
77
+ }
78
+
79
+ /**
80
+ * @param string|object $classOrObj
81
+ * @param string $method
82
+ *
83
+ * @return ReflectionMethod
84
+ * @throws ReflectionException
85
+ */
86
+ public static function reflectMethod ($ classOrObj , string $ method ): ReflectionMethod
62
87
{
63
- if (!isset (self ::$ reflects [$ class ])) {
64
- self ::$ reflects [$ class ] = new ReflectionClass ($ class );
88
+ $ id = is_string ($ classOrObj ) ? $ classOrObj : get_class ($ classOrObj );
89
+ $ id .= '. ' . $ method ;
90
+
91
+ if (!isset (self ::$ reflectMths [$ id ])) {
92
+ self ::$ reflectMths [$ id ] = new ReflectionMethod ($ classOrObj , $ method );
65
93
}
66
94
67
- return self ::$ reflects [ $ class ];
95
+ return self ::$ reflectMths [ $ id ];
68
96
}
69
97
70
98
/**
@@ -74,7 +102,7 @@ public static function reflectClass(string $class): ReflectionClass
74
102
*
75
103
* @return Generator
76
104
*/
77
- public static function reflectMethods (ReflectionClass $ reflectClass , int $ flags = 0 , Closure $ nameFilter = null ): ?Generator
105
+ public static function getReflectMethods (ReflectionClass $ reflectClass , int $ flags = 0 , Closure $ nameFilter = null ): ?Generator
78
106
{
79
107
foreach ($ reflectClass ->getMethods ($ flags ) as $ m ) {
80
108
$ mName = $ m ->getName ();
0 commit comments