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.
		
		
		
		
		
			
		
			
				
					
					
						
							85 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							85 lines
						
					
					
						
							2.1 KiB
						
					
					
				| <?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;
 | |
|     }
 | |
| }
 | |
| 
 |