PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 3.14.2
GiveWP – Donation Plugin and Fundraising Platform v3.14.2
4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 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 All 253 releases
give / src / Log / ValueObjects / Enum.php
Enum.php
115 lines 2.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\Log\ValueObjects;
4
5 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
6 use ReflectionClass;
7 use ReflectionException;
8
9 /**
10 * Class ValueObject
11 * @package Give\Log\ValueObjects
12 *
13 * @since 2.10.0
14 */
15 abstract class Enum implements EnumInterface
16 {
17 /**
18 * @var mixed
19 */
20 protected $value;
21
22 /**
23 * ValueObject constructor.
24 *
25 * @param mixed $value
26 */
27 final public function __construct($value)
28 {
29 if ($value instanceof static) {
30 $value = $value->getValue();
31 }
32
33 if ( ! self::isValid($value)) {
34 throw new InvalidArgumentException(
35 sprintf('Invalid %s enumeration value provided %s', static::class, $value)
36 );
37 }
38
39 $this->value = strtoupper($value);
40 }
41
42 /**
43 * Get an array of defined constants
44 *
45 * @return array
46 */
47 public static function getAll()
48 {
49 static $constants = [];
50
51 if ( ! isset($constants[static::class])) {
52 try {
53 $reflection = new ReflectionClass(static::class);
54 $constants[static::class] = $reflection->getConstants();
55 } catch (ReflectionException $exception) {
56 return [];
57 }
58 }
59
60 return $constants[static::class];
61 }
62
63 /**
64 * @inheritDoc
65 */
66 public function getValue()
67 {
68 $constants = self::getAll();
69
70 if (isset($constants[$this->value])) {
71 return $constants[$this->value];
72 }
73
74 return null;
75 }
76
77 /**
78 * Check if value is valid
79 *
80 * @param string $value
81 *
82 * @return bool
83 */
84 public static function isValid($value)
85 {
86 return array_key_exists(
87 strtoupper($value),
88 self::getAll()
89 );
90 }
91
92 /**
93 * @inheritDoc
94 */
95 public function equalsTo($value)
96 {
97 return $value instanceof self && $this->getValue() === $value->getValue();
98 }
99
100 /**
101 * @param string $name
102 * @param array $args
103 *
104 * @return static
105 */
106 public static function __callStatic($name, $args)
107 {
108 if (self::isValid($name)) {
109 return new static($name);
110 }
111
112 throw new InvalidArgumentException("Invalid argument, does not match constant {$name}");
113 }
114 }
115