datatable.directory codebase
https://datatable.directory/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.1 KiB
86 lines
2.1 KiB
6 years ago
|
<?php
|
||
|
|
||
|
namespace MightyPork\Utils;
|
||
|
|
||
|
use MightyPork\Exceptions\NotExistException;
|
||
|
use ReflectionClass;
|
||
|
|
||
|
/** Trait for checking if const is defined in class */
|
||
|
trait Enum
|
||
|
{
|
||
|
private static $cache_enum_constants = null;
|
||
|
|
||
|
/**
|
||
|
* Get all constants
|
||
|
*
|
||
|
* @param string $prefix required name prefix (filter)
|
||
|
* @return array name -> value array
|
||
|
*/
|
||
|
public static function getConstants($prefix = '')
|
||
|
{
|
||
|
if (static::$cache_enum_constants != null) return static::$cache_enum_constants;
|
||
|
|
||
|
$map = (new ReflectionClass(static::class))->getConstants();
|
||
|
$selected = [];
|
||
|
foreach ($map as $k => $v) {
|
||
|
if ($prefix === '' || strpos($k, $prefix) === 0) {
|
||
|
$selected[$k] = $v;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static::$cache_enum_constants = $selected;
|
||
|
return $selected;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Check if a constant with a given value is defined in this class.
|
||
|
*
|
||
|
* @param mixed $value checked value
|
||
|
* @param string $prefix required name prefix
|
||
|
* @return bool
|
||
|
*/
|
||
|
public static function isDefined($value, $prefix = '')
|
||
|
{
|
||
|
return in_array($value, static::getConstants($prefix));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Check if a constant with a given name is defined in this class.
|
||
|
*
|
||
|
* @param string $name checked name
|
||
|
* @param string $prefix required name prefix
|
||
|
* @return bool
|
||
|
*/
|
||
|
public static function hasConstant($name, $prefix = '')
|
||
|
{
|
||
|
return array_key_exists($name, static::getConstants($prefix));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get constant value dynamically by name
|
||
|
*
|
||
|
* @param string $name
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public static function forName($name)
|
||
|
{
|
||
|
return constant(static::class . '::' . $name);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get constant name by it's value
|
||
|
*
|
||
|
* @param mixed $value
|
||
|
* @return string
|
||
|
*/
|
||
|
public static function nameOf($value)
|
||
|
{
|
||
|
$k = array_search($value, static::getConstants());
|
||
|
|
||
|
if ($k == false)
|
||
|
throw new NotExistException("Invalid value '$value' for enum " . static::class);
|
||
|
|
||
|
return $k;
|
||
|
}
|
||
|
}
|