Skip to content

Commit 6e54cd6

Browse files
committed
update some for php helper
1 parent 6c9bcdd commit 6e54cd6

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

src/Helper/PhpHelper.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99

1010
namespace Toolkit\Stdlib\Helper;
1111

12+
use Closure;
13+
use Generator;
14+
use ReflectionClass;
15+
use ReflectionException;
1216
use RuntimeException;
1317
use Toolkit\Stdlib\Obj\ObjectHelper;
1418
use function array_sum;
@@ -38,6 +42,46 @@
3842
*/
3943
class PhpHelper
4044
{
45+
/**
46+
* @var ReflectionClass[]
47+
*/
48+
private static $reflects = [];
49+
50+
/**
51+
* @param string $class
52+
*
53+
* @return ReflectionClass
54+
* @throws ReflectionException
55+
*/
56+
public static function reflectClass(string $class): ReflectionClass
57+
{
58+
if (!isset(self::$reflects[$class])) {
59+
self::$reflects[$class] = new ReflectionClass($class);
60+
}
61+
62+
return self::$reflects[$class];
63+
}
64+
65+
/**
66+
* @param ReflectionClass $reflectClass
67+
* @param int $flags eg: \ReflectionMethod::IS_PUBLIC
68+
* @param Closure|null $nameFilter
69+
*
70+
* @return Generator
71+
*/
72+
public static function reflectMethods(ReflectionClass $reflectClass, int $flags = 0, Closure $nameFilter = null): ?Generator
73+
{
74+
foreach ($reflectClass->getMethods($flags) as $m) {
75+
$mName = $m->getName();
76+
77+
if ($nameFilter && false === $nameFilter($mName)) {
78+
continue;
79+
}
80+
81+
yield $mName => $m;
82+
}
83+
}
84+
4185
/**
4286
* @param $value
4387
*

0 commit comments

Comments
 (0)