source: PHP and Enumerations http://stackoverflow.com/questions/254514/php-and-enumerations?page=1&tab=votes#tab-top
PHP doesn't have native Enumerations, the following codes are sample to simulate enum in php. After php 5.3, SplEnum is available.
source: PHP and Enumerations http://stackoverflow.com/questions/254514/php-and-enumerations?page=1&tab=votes#tab-top
PHP doesn't have native Enumerations, the following codes are sample to simulate enum in php. After php 5.3, SplEnum is available.
abstract class BasicEnum { | |
private static $constCacheArray = NULL; | |
private static function getConstants() { | |
if (self::$constCacheArray == NULL) { | |
self::$constCacheArray = []; | |
} | |
$calledClass = get_called_class(); | |
if (!array_key_exists($calledClass, self::$constCacheArray)) { | |
$reflect = new ReflectionClass($calledClass); | |
self::$constCacheArray[$calledClass] = $reflect->getConstants(); | |
} | |
return self::$constCacheArray[$calledClass]; | |
} | |
public static function isValidName($name, $strict = false) { | |
$constants = self::getConstants(); | |
if ($strict) { | |
return array_key_exists($name, $constants); | |
} | |
$keys = array_map('strtolower', array_keys($constants)); | |
return in_array(strtolower($name), $keys); | |
} | |
public static function isValidValue($value) { | |
$values = array_values(self::getConstants()); | |
return in_array($value, $values, $strict = true); | |
} | |
} |
abstract class DaysOfWeek extends BasicEnum { | |
const Sunday = 0; | |
const Monday = 1; | |
const Tuesday = 2; | |
const Wednesday = 3; | |
const Thursday = 4; | |
const Friday = 5; | |
const Saturday = 6; | |
} | |
DaysOfWeek::isValidName('Humpday'); // false | |
DaysOfWeek::isValidName('Monday'); // true | |
DaysOfWeek::isValidName('monday'); // true | |
DaysOfWeek::isValidName('monday', $strict = true); // false | |
DaysOfWeek::isValidName(0); // false | |
DaysOfWeek::isValidValue(0); // true | |
DaysOfWeek::isValidValue(5); // true | |
DaysOfWeek::isValidValue(7); // false | |
DaysOfWeek::isValidValue('Friday'); // false |