1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
<?php /** * BaconQrCode * * @link http://github.com/Bacon/BaconQrCode For the canonical source repository * @copyright 2013 Ben 'DASPRiD' Scholzen * @license http://opensource.org/licenses/BSD-2-Clause Simplified BSD License */
namespace BaconQrCode\Common;
use BaconQrCode\Exception; use ReflectionClass;
/** * A general enum implementation until we got SplEnum. */ abstract class AbstractEnum { /** * Default value. */ const __default = null;
/** * Current value. * * @var mixed */ protected $value;
/** * Cache of constants. * * @var array */ protected $constants;
/** * Whether to handle values strict or not. * * @var boolean */ protected $strict;
/** * Creates a new enum. * * @param mixed $initialValue * @param boolean $strict */ public function __construct($initialValue = null, $strict = false) { $this->strict = $strict; $this->change($initialValue); }
/** * Changes the value of the enum. * * @param mixed $value * @return void */ public function change($value) { if (!in_array($value, $this->getConstList(), $this->strict)) { throw new Exception\UnexpectedValueException('Value not a const in enum ' . get_class($this)); }
$this->value = $value; }
/** * Gets current value. * * @return mixed */ public function get() { return $this->value; }
/** * Gets all constants (possible values) as an array. * * @param boolean $includeDefault * @return array */ public function getConstList($includeDefault = true) { if ($this->constants === null) { $reflection = new ReflectionClass($this); $this->constants = $reflection->getConstants(); }
if ($includeDefault) { return $this->constants; }
$constants = $this->constants; unset($constants['__default']);
return $constants; }
/** * Gets the name of the enum. * * @return string */ public function __toString() { return array_search($this->value, $this->getConstList()); } }
|