PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.5
Independent Analytics – WordPress Analytics Plugin v2.15.5
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / vendor / illuminate / support / Traits / ReflectsClosures.php
independent-analytics / vendor / illuminate / support / Traits Last commit date
CapsuleManagerTrait.php 2 years ago ForwardsCalls.php 2 years ago Localizable.php 2 years ago ReflectsClosures.php 2 years ago Tappable.php 6 months ago
ReflectsClosures.php
77 lines
1 <?php
2
3 namespace IAWPSCOPED\Illuminate\Support\Traits;
4
5 use Closure;
6 use IAWPSCOPED\Illuminate\Support\Reflector;
7 use ReflectionFunction;
8 use RuntimeException;
9 /** @internal */
10 trait ReflectsClosures
11 {
12 /**
13 * Get the class name of the first parameter of the given Closure.
14 *
15 * @param \Closure $closure
16 * @return string
17 *
18 * @throws \ReflectionException
19 * @throws \RuntimeException
20 */
21 protected function firstClosureParameterType(Closure $closure)
22 {
23 $types = \array_values($this->closureParameterTypes($closure));
24 if (!$types) {
25 throw new RuntimeException('The given Closure has no parameters.');
26 }
27 if ($types[0] === null) {
28 throw new RuntimeException('The first parameter of the given Closure is missing a type hint.');
29 }
30 return $types[0];
31 }
32 /**
33 * Get the class names of the first parameter of the given Closure, including union types.
34 *
35 * @param \Closure $closure
36 * @return array
37 *
38 * @throws \ReflectionException
39 * @throws \RuntimeException
40 */
41 protected function firstClosureParameterTypes(Closure $closure)
42 {
43 $reflection = new ReflectionFunction($closure);
44 $types = \IAWPSCOPED\collect($reflection->getParameters())->mapWithKeys(function ($parameter) {
45 if ($parameter->isVariadic()) {
46 return [$parameter->getName() => null];
47 }
48 return [$parameter->getName() => Reflector::getParameterClassNames($parameter)];
49 })->filter()->values()->all();
50 if (empty($types)) {
51 throw new RuntimeException('The given Closure has no parameters.');
52 }
53 if (isset($types[0]) && empty($types[0])) {
54 throw new RuntimeException('The first parameter of the given Closure is missing a type hint.');
55 }
56 return $types[0];
57 }
58 /**
59 * Get the class names / types of the parameters of the given Closure.
60 *
61 * @param \Closure $closure
62 * @return array
63 *
64 * @throws \ReflectionException
65 */
66 protected function closureParameterTypes(Closure $closure)
67 {
68 $reflection = new ReflectionFunction($closure);
69 return \IAWPSCOPED\collect($reflection->getParameters())->mapWithKeys(function ($parameter) {
70 if ($parameter->isVariadic()) {
71 return [$parameter->getName() => null];
72 }
73 return [$parameter->getName() => Reflector::getParameterClassName($parameter)];
74 })->all();
75 }
76 }
77