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, $strict = true) {
$values = array_values(self::getConstants());
return in_array($value, $values, $strict);
}
}
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;
}
/********* EXAMPLE *********/
var_dump(DaysOfWeek::isValidName('Humpday')); // false
var_dump(DaysOfWeek::isValidName('Monday')); // true
var_dump(DaysOfWeek::isValidName('monday')); // true
var_dump(DaysOfWeek::isValidName('monday', $strict = true)); // false
var_dump(DaysOfWeek::isValidName(0)); // false
var_dump(DaysOfWeek::isValidValue(0)); // true
var_dump(DaysOfWeek::isValidValue(5)); // true
var_dump(DaysOfWeek::isValidValue(7)); // false
var_dump(DaysOfWeek::isValidValue('Friday')); // false
Created
February 27, 2023 14:58
-
-
Save DarkVss/241489a185ae4a256df5c20fe0dfd50b to your computer and use it in GitHub Desktop.
PHP Enums before 8.1
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment