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;
 | 
						|
    }
 | 
						|
}
 | 
						|
 |