View difference between Paste ID: Swr4UjLJ and QQhMvBgM
SHOW: | | - or go back to the newest paste.
1
<?PHP
2
	/**
3
	 * ILLI
4-
		final public function __construct($default = self::__default)
4+
	 *
5
	 * @category   ILLI
6-
			$this->__reflectionBase  = new ReflectionClass(__CLASS__);
6+
	 * @package    ILLI
7-
			//$this->__reflectionClass = new ReflectionClass($this->getQualifiedName());
7+
	 * @subpackage SystemType
8-
			$this->__reflectionClass = new ReflectionClass(get_class($this));
8+
	 * @link       http://illi.be
9-
			$this->__constantsBase   = $this->__reflectionBase->getConstants();
9+
	 * @license    http://l.illi.be
10
	 * @copyright  ILLI Conference
11
	 */
12
13-
			var_dump($this->__constantsBase);
13+
	/**
14-
			var_dump($this->__constantsClass);
14+
	 * ILLI System Type Enum
15-
/*
15+
	 *
16-
array(5) {
16+
	 * @category   ILLI
17-
  ["__default"]=>
17+
	 * @package    ILLI
18-
  NULL
18+
	 * @subpackage SystemType
19-
  ["__STRICT_INTEGER"]=>
19+
	 * @link       http://illi.be
20-
  int(1)
20+
	 * @license    http://l.illi.be
21-
  ["__STRICT_STRING"]=>
21+
	 * @copyright  ILLI Conference
22-
  int(2)
22+
	 */
23-
  ["__STRICT_FLOAT"]=>
23+
	ABSTRACT CLASS ILLI_System_Type_Enum EXTENDS ILLI_System_Type_Abstract
24-
  int(4)
24+
	{
25-
  ["__STRICT_SCALAR"]=>
25+
		private static $__reflectionBase	= NULL;
26-
  int(7)
26+
		private static $__constantsBase		= array();
27-
}
27+
28-
array(7) {
28+
		private $__reflectionClass		= NULL;		
29-
  ["APPLE"]=>
29+
		private $__constantsClass		= array();
30-
  int(1)
30+
31-
  ["ORANGE"]=>
31+
		private $__definedConstants		= NULL;
32-
  int(2)
32+
33-
  ["__default"]=>
33+
		private $__definedDefault		= NULL;
34-
  NULL
34+
		private $__initValue			= NULL;
35-
  ["__STRICT_INTEGER"]=>
35+
		private $__definedValue			= NULL;
36-
  int(1)
36+
37-
  ["__STRICT_STRING"]=>
37+
		const STRICT_INTEGER			= 0x00000001;
38-
  int(2)
38+
		const STRICT_STRING			= 0x00000002;
39-
  ["__STRICT_FLOAT"]=>
39+
		const STRICT_FLOAT			= 0x00000004;
40-
  int(4)
40+
41-
  ["__STRICT_SCALAR"]=>
41+
		const STRICT_SCALAR			= 0x00000007;
42-
  int(7)
42+
43-
}
43+
44-
*/
44+
		const STRICT_TYPE			= 0x00000001;
45
		
46-
			// remove private constants from child
46+
		private $mode				= 0;
47-
			$diff = array_intersect_assoc($this->__constantsBase, $this->__constantsClass);			
47+
48
		
49
		final public function __construct($default = NULL)
50-
				if($const == '__default')
50+
51-
					continue;
51+
			if(NULL === self::$__reflectionBase)
52
			{
53
				self::$__reflectionBase  = new ReflectionClass(__CLASS__);
54
				self::$__constantsBase   = self::$__reflectionBase->getConstants();
55
			}
56-
			var_dump($this->__constantsBase);
56+
			$this->__reflectionClass = new ReflectionClass($this->getQualifiedName());
57-
			var_dump($this->__constantsClass);
57+
58-
/*
58+
59
			// hide constants from base
60-
array(5) {
60+
			$diff = array_intersect_assoc(self::$__constantsBase, $this->__constantsClass);			
61-
  ["__default"]=>
61+
62-
  NULL
62+
63-
  ["__STRICT_INTEGER"]=>
63+
64-
  int(1)
64+
			$this->__definedConstants = new ILLI_System_Type_AssocArray($this->__constantsClass);
65-
  ["__STRICT_STRING"]=>
65+
66-
  int(2)
66+
			if(sizeOf($this->__constantsClass) <= 1)
67-
  ["__STRICT_FLOAT"]=>
67+
				throw new ILLI_Exception_ArgumentExpected
68-
  int(4)
68+
				(
69-
  ["__STRICT_SCALAR"]=>
69+
					ILLI_System_E::ARGUMENT_EXPECTED_ENUMERABLE_CONSTANT_EXPECTED,
70-
  int(7)
70+
					array($this->getQualifiedName())
71-
}
71+
				);
72-
array(3) {
72+
73-
  ["APPLE"]=>
73+
			if(FALSE === $this->__definedConstants->offsetExists('__DEFAULT'))
74-
  int(1)
74+
				throw new ILLI_Exception_ArgumentExpected
75-
  ["ORANGE"]=>
75+
				(
76-
  int(2)
76+
					ILLI_System_E::ARGUMENT_EXPECTED_ENUMERABLE_DEFAULT_EXPECTED,
77-
  ["__default"]=>
77+
					array
78-
  NULL
78+
					(
79-
}
79+
						$this->getQualifiedName(),
80-
*/			
80+
						'__DEFAULT'
81
					)
82-
			die();
82+
				);
83
				
84
			$this->__definedDefault = $this->__definedConstants->offsetGet('__DEFAULT');
85
			
86
			if(NULL === $this->__definedDefault)
87
				throw new ILLI_Exception_ArgumentExpected
88
				(
89
					ILLI_System_E::ARGUMENT_EXPECTED_ENUMERABLE_IS_NULL,
90
					array
91
					(
92
						$this->getQualifiedName(),
93
						'__DEFAULT'
94
					)
95
				);
96
			
97
			$this->__definedConstants->offsetUnset('__DEFAULT');
98
			
99
			if(FALSE === $this->isDefinedValue($this->__definedDefault))
100
				throw new ILLI_Exception_ArgumentExpected
101
				(
102
					ILLI_SYSTEM_E::ARGUMENT_EXPECTED_ENUMERABLE_DEFINED_EXPECTED,
103
					array
104
					(
105
						$this->getQualifiedName(),
106
						'__DEFAULT',
107
						$this->__definedDefault
108
					)
109
				);
110
			
111
			if(NULL === $default)
112
				$default = $this->__definedDefault;
113
				
114
			$this->define($default);
115
			$this->__initValue = $default;
116
		}
117
		
118
		final public function define($value)
119
		{
120
			try
121
			{
122
				if(FALSE === $this->isDefinedValue($value))
123
					throw new ILLI_Exception_ArgumentOutOfRange
124
					(
125
						ILLI_SYSTEM_E::ARGUMENT_OUT_OF_ENUM_INDEX,
126
						array($value)
127
					);
128
			}
129
			catch(ILLI_Exception_ArgumentOutOfRange $e)
130
			{
131
				throw $e;
132
			}
133
			catch(ILLI_Exception_Argument $e)
134
			{
135
				throw new ILLI_Exception_ArgumentOutOfRange
136
				(
137
					ILLI_SYSTEM_E::ARGUMENT_OUT_OF_ENUM_INDEX,
138
					$e,
139
					array($const)
140
				);
141
			}
142
			
143
			$this->__definedValue = $value;
144
		}
145
		
146
		final public function getValues()
147
		{
148
			return $this->__definedConstants->getValues();
149
		}
150
		
151
		final public function getNames($value = NULL)
152
		{
153
			return $this->__definedConstants->getOffsets($value);
154
		}
155
		
156
		final public function getValue($const)
157
		{
158
			try
159
			{
160
				if(FALSE === $this->isDefinedConst($const))
161
					throw new ILLI_Exception_ArgumentOutOfRange
162
					(
163
						ILLI_SYSTEM_E::ARGUMENT_OUT_OF_ENUM_INDEX,	
164
						array($const)
165
					);
166
			}
167
			catch(ILLI_Exception_ArgumentOutOfRange $e)
168
			{
169
				throw $e;
170
			}
171
			catch(ILLI_Exception_Argument $e)
172
			{
173
				throw new ILLI_Exception_ArgumentOutOfRange
174
				(
175
					ILLI_SYSTEM_E::ARGUMENT_OUT_OF_ENUM_INDEX,
176
					$e,
177
					array($const)
178
				);
179
			}
180
				
181
			return $this->__definedConstants->offsetGet($const);
182
		}
183
		
184
		final public function reset()
185
		{
186
			$this->define($this->__initValue);
187
		}
188
		
189
		final public function getDefinedValue()
190
		{
191
			return $this->__definedValue;
192
		}
193
		
194
		final public function getDefinedName()
195
		{
196
			$res = $this->getDefinedNames();
197
			return array_shift($res);
198
		}
199
		
200
		final public function getDefinedNames()
201
		{
202
			return $this->getNames($this->__definedValue);
203
		}
204
		
205
		final public function getDefaultValue()
206
		{
207
			return $this->__initValue;
208
		}
209
		
210
		final public function getDefaultName()
211
		{
212
			$res = $this->getDefaultNames();
213
			return array_shift($res);
214
		}
215
		
216
		final public function getDefaultNames()
217
		{
218
			return $this->getNames($this->__initValue);
219
		}
220
		
221
		public function __toString()
222
		{
223
			return (string) $this->getDefinedValue();
224
		}
225
		
226
		public function __invoke()
227
		{
228
			return $this->getDefinedValue();
229
		}
230
		
231
		private function isDefinedValue($value)
232
		{
233
			if(NULL === $value)
234
				throw new ILLI_Exception_ArgumentNull;
235
			
236
			if(!is_integer($value))
237
				throw new ILLI_Exception_ArgumentExpected
238
				(
239
					ILLI_System_E::ARGUMENT_EXPECTED_INTEGER
240
				);
241
				
242
			foreach($this->__definedConstants as $key => $val)
243
				if($value === $val)
244
					return TRUE;
245
				
246
			return FALSE;
247
		}
248
		
249
		private function isDefinedConst($const)
250
		{
251
			if(NULL === $const)
252
				throw new ILLI_Exception_ArgumentNull;
253
			
254
			if(!is_string($const))
255
				throw new ILLI_Exception_ArgumentExpected
256
				(
257
					ILLI_System_E::ARGUMENT_EXPECTED_STRING
258
				);
259
			
260
			return $this->__definedConstants->offsetExists($const);
261
		}
262
	}