PluginProbe
Boxzilla – WordPress Popup Builder / 3.4.11
Boxzilla – WordPress Popup Builder v3.4.11
3.4.11 3.4.10 3.4.9 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 trunk 3.0 3.0.1 3.0.2 3.0.3 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 All 72 releases
← All changes | src/di/class-container.php +193 -218 3.1.173.4.11 View file →
@@ -1,8 +1,8 @@
1 1 <?php
2 -
2 +// phpcs:ignoreFile
3 3 /*
4 - * This file is part of Pimple.
4 + * This is a modified version of Pimple, a dependency injection container for PHP originally developed by Fabien Potencier.
5 5 *
6 6 * Copyright (c) 2009 Fabien Potencier
7 7 *
8 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -30,252 +30,227 @@
30 30 * Container main class.
31 31 *
32 32 * @author Fabien Potencier
33 33 */
34 -class Container implements \ArrayAccess
35 -{
36 - private $values = array();
37 - private $factories;
38 - private $protected;
39 - private $frozen = array();
40 - private $raw = array();
41 - private $keys = array();
34 +class Container implements \ArrayAccess {
42 35
43 - /**
44 - * Instantiate the container.
45 - *
46 - * Objects and parameters can be passed as argument to the constructor.
47 - *
48 - * @param array $values The parameters or objects.
49 - */
50 - public function __construct(array $values = array())
51 - {
52 - $this->factories = new \SplObjectStorage();
53 - $this->protected = new \SplObjectStorage();
36 + private $values = array();
37 + private $factories;
38 + private $protected;
39 + private $frozen = array();
40 + private $raw = array();
41 + private $keys = array();
54 42
55 - foreach ($values as $key => $value) {
56 - $this->offsetSet($key, $value);
57 - }
58 - }
43 + /**
44 + * Instantiate the container.
45 + *
46 + * Objects and parameters can be passed as argument to the constructor.
47 + *
48 + * @param array $values The parameters or objects.
49 + */
50 + public function __construct( array $values = array() ) {
51 + $this->factories = new \SplObjectStorage();
52 + $this->protected = new \SplObjectStorage();
59 53
60 - /**
61 - * Sets a parameter or an object.
62 - *
63 - * Objects must be defined as Closures.
64 - *
65 - * Allowing any PHP callable leads to difficult to debug problems
66 - * as function names (strings) are callable (creating a function with
67 - * the same name as an existing parameter would break your container).
68 - *
69 - * @param string $id The unique identifier for the parameter or object
70 - * @param mixed $value The value of the parameter or a closure to define an object
71 - * @throws \RuntimeException Prevent override of a frozen service
72 - */
73 - public function offsetSet($id, $value)
74 - {
75 - if (isset($this->frozen[$id])) {
76 - throw new \RuntimeException(sprintf('Cannot override frozen service "%s".', $id));
77 - }
54 + foreach ( $values as $key => $value ) {
55 + $this->offsetSet( $key, $value );
56 + }
57 + }
78 58
79 - $this->values[$id] = $value;
80 - $this->keys[$id] = true;
81 - }
59 + /**
60 + * Sets a parameter or an object.
61 + *
62 + * Objects must be defined as Closures.
63 + *
64 + * Allowing any PHP callable leads to difficult to debug problems
65 + * as function names (strings) are callable (creating a function with
66 + * the same name as an existing parameter would break your container).
67 + *
68 + * @param string $id The unique identifier for the parameter or object
69 + * @param mixed $value The value of the parameter or a closure to define an object
70 + * @throws \RuntimeException Prevent override of a frozen service
71 + */
72 + #[\ReturnTypeWillChange]
73 + public function offsetSet( $id, $value ) {
74 + if ( isset( $this->frozen[ $id ] ) ) {
75 + throw new \RuntimeException( sprintf( 'Cannot override frozen service "%s".', $id ) );
76 + }
82 77
83 - /**
84 - * Gets a parameter or an object.
85 - *
86 - * @param string $id The unique identifier for the parameter or object
87 - *
88 - * @return mixed The value of the parameter or an object
89 - *
90 - * @throws \InvalidArgumentException if the identifier is not defined
91 - */
92 - public function offsetGet($id)
93 - {
94 - if (!isset($this->keys[$id])) {
95 - throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id));
96 - }
78 + $this->values[ $id ] = $value;
79 + $this->keys[ $id ] = true;
80 + }
97 81
98 - if (
99 - isset($this->raw[$id])
100 - || !is_object($this->values[$id])
101 - || isset($this->protected[$this->values[$id]])
102 - || !method_exists($this->values[$id], '__invoke')
103 - ) {
104 - return $this->values[$id];
105 - }
82 + /**
83 + * Gets a parameter or an object.
84 + *
85 + * @param string $id The unique identifier for the parameter or object
86 + *
87 + * @return mixed The value of the parameter or an object
88 + *
89 + * @throws \InvalidArgumentException if the identifier is not defined
90 + */
91 + #[\ReturnTypeWillChange]
92 + public function offsetGet( $id ) {
93 + if ( ! isset( $this->keys[ $id ] ) ) {
94 + throw new \InvalidArgumentException( sprintf( 'Identifier "%s" is not defined.', $id ) );
95 + }
106 96
107 - if (isset($this->factories[$this->values[$id]])) {
108 - return $this->values[$id]($this);
109 - }
97 + if (
98 + isset( $this->raw[ $id ] )
99 + || ! is_object( $this->values[ $id ] )
100 + || isset( $this->protected[ $this->values[ $id ] ] )
101 + || ! method_exists( $this->values[ $id ], '__invoke' )
102 + ) {
103 + return $this->values[ $id ];
104 + }
110 105
111 - $raw = $this->values[$id];
112 - $val = $this->values[$id] = $raw($this);
113 - $this->raw[$id] = $raw;
106 + if ( isset( $this->factories[ $this->values[ $id ] ] ) ) {
107 + return $this->values[ $id ]($this);
108 + }
114 109
115 - $this->frozen[$id] = true;
110 + $raw = $this->values[ $id ];
111 + $val = $this->values[ $id ] = $raw( $this );
112 + $this->raw[ $id ] = $raw;
116 113
117 - return $val;
118 - }
114 + $this->frozen[ $id ] = true;
119 115
120 - /**
121 - * Checks if a parameter or an object is set.
122 - *
123 - * @param string $id The unique identifier for the parameter or object
124 - *
125 - * @return bool
126 - */
127 - public function offsetExists($id)
128 - {
129 - return isset($this->keys[$id]);
130 - }
116 + return $val;
117 + }
131 118
132 - /**
133 - * Unsets a parameter or an object.
134 - *
135 - * @param string $id The unique identifier for the parameter or object
136 - */
137 - public function offsetUnset($id)
138 - {
139 - if (isset($this->keys[$id])) {
140 - if (is_object($this->values[$id])) {
141 - unset($this->factories[$this->values[$id]], $this->protected[$this->values[$id]]);
142 - }
119 + /**
120 + * Checks if a parameter or an object is set.
121 + *
122 + * @param string $id The unique identifier for the parameter or object
123 + *
124 + * @return bool
125 + */
126 + #[\ReturnTypeWillChange]
127 + public function offsetExists( $id ) {
128 + return isset( $this->keys[ $id ] );
129 + }
143 130
144 - unset($this->values[$id], $this->frozen[$id], $this->raw[$id], $this->keys[$id]);
145 - }
146 - }
131 + /**
132 + * Unsets a parameter or an object.
133 + *
134 + * @param string $id The unique identifier for the parameter or object
135 + */
136 + #[\ReturnTypeWillChange]
137 + public function offsetUnset( $id ) {
138 + if ( isset( $this->keys[ $id ] ) ) {
139 + if ( is_object( $this->values[ $id ] ) ) {
140 + unset( $this->factories[ $this->values[ $id ] ], $this->protected[ $this->values[ $id ] ] );
141 + }
147 142
148 - /**
149 - * Marks a callable as being a factory service.
150 - *
151 - * @param callable $callable A service definition to be used as a factory
152 - *
153 - * @return callable The passed callable
154 - *
155 - * @throws \InvalidArgumentException Service definition has to be a closure of an invokable object
156 - */
157 - public function factory($callable)
158 - {
159 - if (!is_object($callable) || !method_exists($callable, '__invoke')) {
160 - throw new \InvalidArgumentException('Service definition is not a Closure or invokable object.');
161 - }
143 + unset( $this->values[ $id ], $this->frozen[ $id ], $this->raw[ $id ], $this->keys[ $id ] );
144 + }
145 + }
162 146
163 - $this->factories->attach($callable);
147 + /**
148 + * Marks a callable as being a factory service.
149 + *
150 + * @param callable $callable A service definition to be used as a factory
151 + *
152 + * @return callable The passed callable
153 + *
154 + * @throws \InvalidArgumentException Service definition has to be a closure of an invokable object
155 + */
156 + public function factory( $callable ) {
157 + if ( ! is_object( $callable ) || ! method_exists( $callable, '__invoke' ) ) {
158 + throw new \InvalidArgumentException( 'Service definition is not a Closure or invokable object.' );
159 + }
164 160
165 - return $callable;
166 - }
161 + $this->factories->attach( $callable );
167 162
168 - /**
169 - * Protects a callable from being interpreted as a service.
170 - *
171 - * This is useful when you want to store a callable as a parameter.
172 - *
173 - * @param callable $callable A callable to protect from being evaluated
174 - *
175 - * @return callable The passed callable
176 - *
177 - * @throws \InvalidArgumentException Service definition has to be a closure of an invokable object
178 - */
179 - public function protect($callable)
180 - {
181 - if (!is_object($callable) || !method_exists($callable, '__invoke')) {
182 - throw new \InvalidArgumentException('Callable is not a Closure or invokable object.');
183 - }
163 + return $callable;
164 + }
184 165
185 - $this->protected->attach($callable);
166 + /**
167 + * Protects a callable from being interpreted as a service.
168 + *
169 + * This is useful when you want to store a callable as a parameter.
170 + *
171 + * @param callable $callable A callable to protect from being evaluated
172 + *
173 + * @return callable The passed callable
174 + *
175 + * @throws \InvalidArgumentException Service definition has to be a closure of an invokable object
176 + */
177 + public function protect( $callable ) {
178 + if ( ! is_object( $callable ) || ! method_exists( $callable, '__invoke' ) ) {
179 + throw new \InvalidArgumentException( 'Callable is not a Closure or invokable object.' );
180 + }
186 181
187 - return $callable;
188 - }
182 + $this->protected->attach( $callable );
189 183
190 - /**
191 - * Gets a parameter or the closure defining an object.
192 - *
193 - * @param string $id The unique identifier for the parameter or object
194 - *
195 - * @return mixed The value of the parameter or the closure defining an object
196 - *
197 - * @throws \InvalidArgumentException if the identifier is not defined
198 - */
199 - public function raw($id)
200 - {
201 - if (!isset($this->keys[$id])) {
202 - throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id));
203 - }
184 + return $callable;
185 + }
204 186
205 - if (isset($this->raw[$id])) {
206 - return $this->raw[$id];
207 - }
187 + /**
188 + * Gets a parameter or the closure defining an object.
189 + *
190 + * @param string $id The unique identifier for the parameter or object
191 + *
192 + * @return mixed The value of the parameter or the closure defining an object
193 + *
194 + * @throws \InvalidArgumentException if the identifier is not defined
195 + */
196 + public function raw( $id ) {
197 + if ( ! isset( $this->keys[ $id ] ) ) {
198 + throw new \InvalidArgumentException( sprintf( 'Identifier "%s" is not defined.', $id ) );
199 + }
208 200
209 - return $this->values[$id];
210 - }
201 + if ( isset( $this->raw[ $id ] ) ) {
202 + return $this->raw[ $id ];
203 + }
211 204
212 - /**
213 - * Extends an object definition.
214 - *
215 - * Useful when you want to extend an existing object definition,
216 - * without necessarily loading that object.
217 - *
218 - * @param string $id The unique identifier for the object
219 - * @param callable $callable A service definition to extend the original
220 - *
221 - * @return callable The wrapped callable
222 - *
223 - * @throws \InvalidArgumentException if the identifier is not defined or not a service definition
224 - */
225 - public function extend($id, $callable)
226 - {
227 - if (!isset($this->keys[$id])) {
228 - throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id));
229 - }
205 + return $this->values[ $id ];
206 + }
230 207
231 - if (!is_object($this->values[$id]) || !method_exists($this->values[$id], '__invoke')) {
232 - throw new \InvalidArgumentException(sprintf('Identifier "%s" does not contain an object definition.', $id));
233 - }
208 + /**
209 + * Extends an object definition.
210 + *
211 + * Useful when you want to extend an existing object definition,
212 + * without necessarily loading that object.
213 + *
214 + * @param string $id The unique identifier for the object
215 + * @param callable $callable A service definition to extend the original
216 + *
217 + * @return callable The wrapped callable
218 + *
219 + * @throws \InvalidArgumentException if the identifier is not defined or not a service definition
220 + */
221 + public function extend( $id, $callable ) {
222 + if ( ! isset( $this->keys[ $id ] ) ) {
223 + throw new \InvalidArgumentException( sprintf( 'Identifier "%s" is not defined.', $id ) );
224 + }
234 225
235 - if (!is_object($callable) || !method_exists($callable, '__invoke')) {
236 - throw new \InvalidArgumentException('Extension service definition is not a Closure or invokable object.');
237 - }
226 + if ( ! is_object( $this->values[ $id ] ) || ! method_exists( $this->values[ $id ], '__invoke' ) ) {
227 + throw new \InvalidArgumentException( sprintf( 'Identifier "%s" does not contain an object definition.', $id ) );
228 + }
238 229
239 - $factory = $this->values[$id];
230 + if ( ! is_object( $callable ) || ! method_exists( $callable, '__invoke' ) ) {
231 + throw new \InvalidArgumentException( 'Extension service definition is not a Closure or invokable object.' );
232 + }
240 233
241 - $extended = function ($c) use ($callable, $factory) {
242 - return $callable($factory($c), $c);
243 - };
234 + $factory = $this->values[ $id ];
244 235
245 - if (isset($this->factories[$factory])) {
246 - $this->factories->detach($factory);
247 - $this->factories->attach($extended);
248 - }
236 + $extended = function ( $c ) use ( $callable, $factory ) {
237 + return $callable( $factory( $c ), $c );
238 + };
249 239
250 - return $this[$id] = $extended;
251 - }
240 + if ( isset( $this->factories[ $factory ] ) ) {
241 + $this->factories->detach( $factory );
242 + $this->factories->attach( $extended );
243 + }
252 244
253 - /**
254 - * Returns all defined value names.
255 - *
256 - * @return array An array of value names
257 - */
258 - public function keys()
259 - {
260 - return array_keys($this->values);
261 - }
245 + return $this[ $id ] = $extended;
246 + }
262 247
263 - /**
264 - * Registers a service provider.
265 - *
266 - * @param ServiceProviderInterface $provider A ServiceProviderInterface instance
267 - * @param array $values An array of values that customizes the provider
268 - *
269 - * @return static
270 - */
271 - public function register(ServiceProviderInterface $provider, array $values = array())
272 - {
273 - $provider->register($this);
274 -
275 - foreach ($values as $key => $value) {
276 - $this[$key] = $value;
277 - }
278 -
279 - return $this;
280 - }
248 + /**
249 + * Returns all defined value names.
250 + *
251 + * @return array An array of value names
252 + */
253 + public function keys() {
254 + return array_keys( $this->values );
255 + }
281 256 }