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 / symfony / service-contracts / ServiceLocatorTrait.php
independent-analytics / vendor / symfony / service-contracts Last commit date
Attribute 2 years ago Test 1 month ago ResetInterface.php 2 years ago ServiceLocatorTrait.php 1 month ago ServiceProviderInterface.php 2 years ago ServiceSubscriberInterface.php 1 month ago ServiceSubscriberTrait.php 1 month ago
ServiceLocatorTrait.php
111 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 namespace IAWPSCOPED\Symfony\Contracts\Service;
12
13 use IAWPSCOPED\Psr\Container\ContainerExceptionInterface;
14 use IAWPSCOPED\Psr\Container\NotFoundExceptionInterface;
15 // Help opcache.preload discover always-needed symbols
16 \class_exists(ContainerExceptionInterface::class);
17 \class_exists(NotFoundExceptionInterface::class);
18 /**
19 * A trait to help implement ServiceProviderInterface.
20 *
21 * @author Robin Chalas <robin.chalas@gmail.com>
22 * @author Nicolas Grekas <p@tchwork.com>
23 * @internal
24 */
25 trait ServiceLocatorTrait
26 {
27 private array $factories;
28 private array $loading = [];
29 private array $providedTypes;
30 /**
31 * @param callable[] $factories
32 */
33 public function __construct(array $factories)
34 {
35 $this->factories = $factories;
36 }
37 /**
38 * {@inheritdoc}
39 */
40 public function has(string $id) : bool
41 {
42 return isset($this->factories[$id]);
43 }
44 /**
45 * {@inheritdoc}
46 */
47 public function get(string $id) : mixed
48 {
49 if (!isset($this->factories[$id])) {
50 throw $this->createNotFoundException($id);
51 }
52 if (isset($this->loading[$id])) {
53 $ids = \array_values($this->loading);
54 $ids = \array_slice($this->loading, \array_search($id, $ids));
55 $ids[] = $id;
56 throw $this->createCircularReferenceException($id, $ids);
57 }
58 $this->loading[$id] = $id;
59 try {
60 return $this->factories[$id]($this);
61 } finally {
62 unset($this->loading[$id]);
63 }
64 }
65 /**
66 * {@inheritdoc}
67 */
68 public function getProvidedServices() : array
69 {
70 if (!isset($this->providedTypes)) {
71 $this->providedTypes = [];
72 foreach ($this->factories as $name => $factory) {
73 if (!\is_callable($factory)) {
74 $this->providedTypes[$name] = '?';
75 } else {
76 $type = (new \ReflectionFunction($factory))->getReturnType();
77 $this->providedTypes[$name] = $type ? ($type->allowsNull() ? '?' : '') . ($type instanceof \ReflectionNamedType ? $type->getName() : $type) : '?';
78 }
79 }
80 }
81 return $this->providedTypes;
82 }
83 private function createNotFoundException(string $id) : NotFoundExceptionInterface
84 {
85 if (!($alternatives = \array_keys($this->factories))) {
86 $message = 'is empty...';
87 } else {
88 $last = \array_pop($alternatives);
89 if ($alternatives) {
90 $message = \sprintf('only knows about the "%s" and "%s" services.', \implode('", "', $alternatives), $last);
91 } else {
92 $message = \sprintf('only knows about the "%s" service.', $last);
93 }
94 }
95 if ($this->loading) {
96 $message = \sprintf('The service "%s" has a dependency on a non-existent service "%s". This locator %s', \end($this->loading), $id, $message);
97 } else {
98 $message = \sprintf('Service "%s" not found: the current service locator %s', $id, $message);
99 }
100 return new class($message) extends \InvalidArgumentException implements NotFoundExceptionInterface
101 {
102 };
103 }
104 private function createCircularReferenceException(string $id, array $path) : ContainerExceptionInterface
105 {
106 return new class(\sprintf('Circular reference detected for service "%s", path: "%s".', $id, \implode(' -> ', $path))) extends \RuntimeException implements ContainerExceptionInterface
107 {
108 };
109 }
110 }
111