Passed
Push — master ( 0106e0...6803eb )
by Jean-Christophe
04:22
created

BaseEnum::getRandomValue()   A

Complexity

Conditions 4
Paths 2

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 9
nc 2
nop 1
dl 0
loc 11
rs 9.9666
c 0
b 0
f 0
1
<?php
2
namespace Ajax\common;
3
4
/**
5
 * Base class for enums
6
 * see at http://stackoverflow.com/questions/254514/php-and-enumerations
7
 *
8
 * @author jc
9
 *
10
 */
11
abstract class BaseEnum {
12
13
	private static $constCacheArray = NULL;
14
15
	private static $picked = [];
16
17
	public static function getConstants() {
18
		if (self::$constCacheArray == NULL) {
19
			self::$constCacheArray = [];
20
		}
21
		$calledClass = get_called_class();
22
		if (! \array_key_exists($calledClass, self::$constCacheArray)) {
23
			$reflect = new \ReflectionClass($calledClass);
24
			self::$constCacheArray[$calledClass] = $reflect->getConstants();
25
		}
26
		return self::$constCacheArray[$calledClass];
27
	}
28
29
	public static function getConstantValues($postFix = "", $prefixBefore = false) {
30
		if ($postFix == "")
31
			return \array_values(self::getConstants());
32
		else {
33
			if ($prefixBefore === false) {
34
				return \array_map(function ($elem) use ($postFix) {
35
					return $elem . " " . $postFix;
36
				}, \array_values(self::getConstants()));
37
			} else {
38
				return \array_map(function ($elem) use ($postFix) {
39
					return $postFix . " " . $elem;
40
				}, \array_values(self::getConstants()));
41
			}
42
		}
43
	}
44
45
	public static function isValidName($name, $strict = false) {
46
		$constants = self::getConstants();
47
48
		if ($strict) {
49
			return \array_key_exists($name, $constants);
50
		}
51
52
		$keys = \array_map('strtolower', array_keys($constants));
53
		return \in_array(\strtolower($name), $keys);
54
	}
55
56
	public static function isValidValue($value) {
57
		$values = \array_values(self::getConstants());
58
		return \in_array($value, $values, true);
59
	}
60
61
	public static function getRandomValue(bool $unique = false) {
62
		$values = self::getConstantValues();
63
		$count = \count($values);
64
		if ($unique && $count > count(self::$picked)) {
65
			do {
66
				$newVal = $values[\rand(0, $count - 1)];
67
			} while (isset(self::$picked[$newVal]));
68
			self::$picked[$newVal] = true;
69
			return $newVal;
70
		}
71
		return $values[\rand(0, $count - 1)];
72
	}
73
}
74