PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.0.3
GiveWP – Donation Plugin and Fundraising Platform v3.0.3
4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / myclabs / php-enum / src / Enum.php
give / vendor / myclabs / php-enum / src Last commit date
PHPUnit 2 years ago Enum.php 2 years ago
Enum.php
251 lines
1 <?php
2 /**
3 * @link http://github.com/myclabs/php-enum
4 * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
5 */
6
7 namespace MyCLabs\Enum;
8
9 /**
10 * Base Enum class
11 *
12 * Create an enum by implementing this class and adding class constants.
13 *
14 * @author Matthieu Napoli <matthieu@mnapoli.fr>
15 * @author Daniel Costa <danielcosta@gmail.com>
16 * @author Mirosław Filip <mirfilip@gmail.com>
17 *
18 * @psalm-template T
19 * @psalm-immutable
20 */
21 abstract class Enum implements \JsonSerializable
22 {
23 /**
24 * Enum value
25 *
26 * @var mixed
27 * @psalm-var T
28 */
29 protected $value;
30
31 /**
32 * Store existing constants in a static cache per object.
33 *
34 *
35 * @var array
36 * @psalm-var array<class-string, array<string, mixed>>
37 */
38 protected static $cache = [];
39
40 /**
41 * Cache of instances of the Enum class
42 *
43 * @var array
44 * @psalm-var array<class-string, array<string, static>>
45 */
46 protected static $instances = [];
47
48 /**
49 * Creates a new value of some type
50 *
51 * @psalm-pure
52 * @param mixed $value
53 *
54 * @psalm-param static<T>|T $value
55 * @throws \UnexpectedValueException if incompatible type is given.
56 */
57 public function __construct($value)
58 {
59 if ($value instanceof static) {
60 /** @psalm-var T */
61 $value = $value->getValue();
62 }
63
64 if (!$this->isValid($value)) {
65 /** @psalm-suppress InvalidCast */
66 throw new \UnexpectedValueException("Value '$value' is not part of the enum " . static::class);
67 }
68
69 /** @psalm-var T */
70 $this->value = $value;
71 }
72
73 /**
74 * @psalm-pure
75 * @return mixed
76 * @psalm-return T
77 */
78 public function getValue()
79 {
80 return $this->value;
81 }
82
83 /**
84 * Returns the enum key (i.e. the constant name).
85 *
86 * @psalm-pure
87 * @return mixed
88 */
89 public function getKey()
90 {
91 return static::search($this->value);
92 }
93
94 /**
95 * @psalm-pure
96 * @psalm-suppress InvalidCast
97 * @return string
98 */
99 public function __toString()
100 {
101 return (string)$this->value;
102 }
103
104 /**
105 * Determines if Enum should be considered equal with the variable passed as a parameter.
106 * Returns false if an argument is an object of different class or not an object.
107 *
108 * This method is final, for more information read https://github.com/myclabs/php-enum/issues/4
109 *
110 * @psalm-pure
111 * @psalm-param mixed $variable
112 * @return bool
113 */
114 final public function equals($variable = null): bool
115 {
116 return $variable instanceof self
117 && $this->getValue() === $variable->getValue()
118 && static::class === \get_class($variable);
119 }
120
121 /**
122 * Returns the names (keys) of all constants in the Enum class
123 *
124 * @psalm-pure
125 * @psalm-return list<string>
126 * @return array
127 */
128 public static function keys()
129 {
130 return \array_keys(static::toArray());
131 }
132
133 /**
134 * Returns instances of the Enum class of all Enum constants
135 *
136 * @psalm-pure
137 * @psalm-return array<string, static>
138 * @return static[] Constant name in key, Enum instance in value
139 */
140 public static function values()
141 {
142 $values = array();
143
144 /** @psalm-var T $value */
145 foreach (static::toArray() as $key => $value) {
146 $values[$key] = new static($value);
147 }
148
149 return $values;
150 }
151
152 /**
153 * Returns all possible values as an array
154 *
155 * @psalm-pure
156 * @psalm-suppress ImpureStaticProperty
157 *
158 * @psalm-return array<string, mixed>
159 * @return array Constant name in key, constant value in value
160 */
161 public static function toArray()
162 {
163 $class = static::class;
164
165 if (!isset(static::$cache[$class])) {
166 $reflection = new \ReflectionClass($class);
167 static::$cache[$class] = $reflection->getConstants();
168 }
169
170 return static::$cache[$class];
171 }
172
173 /**
174 * Check if is valid enum value
175 *
176 * @param $value
177 * @psalm-param mixed $value
178 * @psalm-pure
179 * @return bool
180 */
181 public static function isValid($value)
182 {
183 return \in_array($value, static::toArray(), true);
184 }
185
186 /**
187 * Check if is valid enum key
188 *
189 * @param $key
190 * @psalm-param string $key
191 * @psalm-pure
192 * @return bool
193 */
194 public static function isValidKey($key)
195 {
196 $array = static::toArray();
197
198 return isset($array[$key]) || \array_key_exists($key, $array);
199 }
200
201 /**
202 * Return key for value
203 *
204 * @param $value
205 *
206 * @psalm-param mixed $value
207 * @psalm-pure
208 * @return mixed
209 */
210 public static function search($value)
211 {
212 return \array_search($value, static::toArray(), true);
213 }
214
215 /**
216 * Returns a value when called statically like so: MyEnum::SOME_VALUE() given SOME_VALUE is a class constant
217 *
218 * @param string $name
219 * @param array $arguments
220 *
221 * @return static
222 * @throws \BadMethodCallException
223 */
224 public static function __callStatic($name, $arguments)
225 {
226 $class = static::class;
227 if (!isset(self::$instances[$class][$name])) {
228 $array = static::toArray();
229 if (!isset($array[$name]) && !\array_key_exists($name, $array)) {
230 $message = "No static method or enum constant '$name' in class " . static::class;
231 throw new \BadMethodCallException($message);
232 }
233 return self::$instances[$class][$name] = new static($array[$name]);
234 }
235 return clone self::$instances[$class][$name];
236 }
237
238 /**
239 * Specify data which should be serialized to JSON. This method returns data that can be serialized by json_encode()
240 * natively.
241 *
242 * @return mixed
243 * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
244 * @psalm-pure
245 */
246 public function jsonSerialize()
247 {
248 return $this->getValue();
249 }
250 }
251